Distribuzione di un servizio WCF ospitato in Internet Information Services (IIS)
Lo sviluppo e la distribuzione di un servizio Windows Communication Foundation (WCF) ospitato in Internet Information Services (IIS) sono costituiti dalle attività seguenti:
Verificare che IIS, ASP.NET, WCF e il componente di attivazione di WCF siano installati e registrati correttamente.
Creare una nuova applicazione IIS o riutilizzare un'applicazione ASP.NET esistente.
Creare un file con estensione svc per il servizio WCF.
Distribuire l'implementazione del servizio nell'applicazione IIS.
Configurare il servizio WCF.
Per una procedura dettagliata sulla creazione di un servizio WCF ospitato in IIS, vedere Procedura: Ospitare un servizio WCF in IIS.
Verificare che IIS, ASP.NET e WCF siano installati e registrati correttamente.
Affinché i servizi WCF ospitati in IIS funzionino correttamente, è necessario che siano installati WCF, IIS e ASP.NET. Le procedure per l'installazione di WCF (come parte di .NET Framework), ASP.NET e IIS variano a seconda del sistema operativo. Per altre informazioni sull'installazione di WCF e .NET Framework, vedere Installare .NET Framework per sviluppatori. Per installare IIS in Windows 10, aprire Programmi e funzionalità in Pannello di controllo e quindi selezionare Attiva o disattiva funzionalità di Windows. In Funzionalità di Windows selezionare Internet Information Services e quindi scegliere OK.
Le istruzioni per l'installazione di IIS in altri sistemi operativi sono disponibili in Installare IIS in Windows Vista e Windows 7 e Installare IIS 8.5 in Windows Server 2012 R2.
Il processo di installazione per .NET Framework registra automaticamente WCF in IIS, se IIS già è presente sul computer. Se IIS viene installato dopo .NET Framework, è richiesto un passaggio aggiuntivo per registrare WCF in IIS e ASP.NET. A tal fine, è possibile procedere come segue, a seconda del sistema operativo:
Windows 7 e Windows Server 2003: usare lo strumento ServiceModel Registration Tool (ServiceModelReg.exe) per registrare WCF con IIS. Per usare questo strumento, digitare
ServiceModelReg.exe /i /x
nel Prompt dei comandi per gli sviluppatori di Visual Studio o Visual Studio Developer PowerShell.Windows 7: è necessario infine verificare che ASP.NET sia configurato per utilizzare .NET Framework 4 o una versione successiva. Per effettuare questa operazione, eseguire lo strumento ASPNET_Regiis con l'opzione
–i
. Per ulteriori informazioni, vedere Strumento di ASP.NET per la registrazione di IIS.
Creare una nuova applicazione IIS o riutilizzare un'applicazione ASP.NET esistente
I servizi WCF ospitati in IIS devono risiedere all'interno di un'applicazione IIS. È possibile creare una nuova applicazione IIS per ospitare esclusivamente servizi WCF. In alternativa, è possibile distribuire un servizio WCF in un'applicazione esistente che ospita già contenuto ASP.NET 2.0, ad esempio pagine ASPX e servizi Web ASP.NET (ASMX). Per altre informazioni su queste opzioni, vedere le sezioni "Hosting di WCF affiancato ad ASP.NET" e "Hosting dei servizi WCF in modalità di compatibilità ASP.NET" in Servizi WCF e ASP.NET.
Si noti che in IIS 6.0 e versioni successive un'applicazione di programmazione isolata e orientata a oggetti viene riavviata periodicamente. Il valore predefinito è 1740 minuti. Il valore massimo supportato è 71.582 minuti. Il riavvio può essere disabilitato. Per altre informazioni su questa proprietà, vedere PeriodicRestartTime.
Creare un file con estensione svc per il servizio WCF
I servizi WCF ospitati in IIS sono rappresentati come file di dati speciali (file con estensione svc) nell'applicazione IIS. Questo modello è simile al modo in cui le pagine ASMX sono rappresentate all'interno di un'applicazione IIS come file con estensione asmx. Un file con estensione svc contiene una direttiva di elaborazione specifica per WCF (@ServiceHost) che consente all'infrastruttura host di WCF di attivare servizi ospitati in risposta ai messaggi in arrivo. La sintassi più comune per un file con estensione svc viene illustrata nell'istruzione seguente:
<% @ServiceHost Service="MyNamespace.MyServiceImplementationTypeName" %>
È costituita dalla direttiva @ServiceHost e da un solo attributo, Service
. Il valore dell'attributo Service
è il nome del tipo Common Language Runtime (CLR) dell'implementazione del servizio. L'utilizzo di questa direttiva equivale fondamentalmente alla creazione di un host del servizio tramite il seguente codice:
new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );
È inoltre possibile una configurazione di hosting aggiuntiva, ad esempio la creazione di un elenco di indirizzi di base per il servizio. È anche possibile utilizzare un ServiceHostFactory personalizzato per estendere la direttiva per l'utilizzo con soluzioni di hosting personalizzate. Le applicazioni IIS che ospitano servizi WCF non sono responsabili della gestione della creazione e della durata delle istanze ServiceHost. L'infrastruttura WCF gestita crea dinamicamente l'istanza ServiceHost necessaria quando viene ricevuta la prima richiesta per il file con estensione svc. L'istanza non viene rilasciata finché non viene chiusa in modo esplicito dal codice o finché l'applicazione non viene riciclata.
Per altre informazioni sulla sintassi per i file con estensione svc, vedere @ServiceHost.
Distribuire l'implementazione del servizio all'applicazione IIS
I servizi WCF ospitati in IIS usano lo stesso modello di compilazione dinamico di ASP.NET 2.0. Come per ASP.NET, è possibile distribuire il codice di implementazione per i servizi WCF ospitati in IIS in vari modi e in varie posizioni, come segue:
Come file dll precompilato nella Global Assembly Cache (GAC) o nella directory \bin dell'applicazione. I file binari precompilati non vengono aggiornati finché non viene distribuita una nuova versione della libreria di classi.
Come file di origine non compilati situati nella directory \App_Code dell'applicazione. I file di origine situati in questa directory vengono richiesti dinamicamente durante l'elaborazione della prima richiesta dell'applicazione. Qualsiasi modifica ai file nella directory \App_Code provoca il riciclo e la ricompilazione dell'intera applicazione quando viene ricevuta la richiesta successiva.
Come codice non compilato posizionato direttamente nel file con estensione svc. Il codice di implementazione può anche trovarsi in linea nel file con estensione svc del servizio, dopo la direttiva @ServiceHost. Qualsiasi modifica al codice inline provoca il riciclo e la ricompilazione dell'applicazione quando viene ricevuta la richiesta successiva.
Per altre informazioni sul modello di compilazione ASP.NET 2.0, vedere Panoramica della compilazione di ASP.NET.
Configurare il servizio WCF
I servizi WCF ospitati in IIS memorizzano la propria configurazione nel file Web.config delle applicazioni. I servizi ospitati in IIS utilizzano gli stessi elementi di configurazione e la stessa sintassi dei servizi WCF ospitati al di fuori di IIS. I vincoli seguenti sono tuttavia specifici per l'ambiente host IIS:
Indirizzi di base per i servizi ospitati in IIS.
Le applicazioni che ospitano servizi WCF al di fuori di IIS possono controllarne l'indirizzo di base passando un set di URI dell'indirizzo di base al costruttore ServiceHost o fornendo un elemento <host> nella configurazione del servizio. I servizi ospitati in IIS non sono in grado di controllare i propri indirizzi di base che corrispondono agli indirizzi dei rispettivi file con estensione svc.
Indirizzi endpoint per i servizi ospitati in IIS
Quando sono ospitati in IIS, gli indirizzi endpoint sono sempre considerati relativi all'indirizzo del file con estensione svc che rappresenta il servizio. Se, ad esempio, l'indirizzo di base di un servizio WCF è http://localhost/Application1/MyService.svc
con la configurazione dell'endpoint seguente:
<endpoint address="anotherEndpoint" />
In questo modo viene fornito un endpoint che può essere raggiunto su http://localhost/Application1/MyService.svc/anotherEndpoint
.
In modo analogo, l'elemento di configurazione dell'endpoint che utilizza una stringa vuota come indirizzo relativo fornisce un endpoint raggiungibile all'indirizzo http://localhost/Application1/MyService.svc
, che è l'indirizzo di base.
<endpoint address="" />
Per gli endpoint del servizio ospitati in IIS è necessario utilizzare sempre indirizzi endpoint relativi. La specifica di un indirizzo endpoint completo (ad esempio http://localhost/MyService.svc
) può comportare errori nella distribuzione del servizio se l'indirizzo endpoint non punta all'applicazione IIS che ospita il servizio che espone l'endpoint. L'utilizzo di indirizzi endpoint relativi per i servizi di hosting evita potenziali conflitti.
Trasporti disponibili
I servizi WCF ospitati in IIS 5.1 e IIS 6.0 sono limitati all'utilizzo di comunicazioni basate su HTTP. Su queste piattaforme IIS, la configurazione di un servizio ospitato affinché utilizzi un'associazione non HTTP, comporta un errore durante l'attivazione del servizio. Per IIS 7.0, i trasporti supportati includono HTTP, Net.TCP, Net.Pipe, Net.MSMQ e msmq.formatname per la compatibilità delle versioni precedenti con le applicazioni MSMQ esistenti.
Sicurezza del trasporto HTTP
I servizi WCF ospitati in IIS possono avvalersi della sicurezza del trasporto HTTP (ad esempio schemi di autenticazione HTTPS e HTTP quali Basic, Digest e l'autenticazione integrata di Windows), a condizione che la directory virtuale IIS contenente il servizio supporti tali impostazioni. Le impostazioni di sicurezza del trasporto HTTP sull'associazione di un endpoint di hosting devono corrispondere alle impostazioni di sicurezza del trasporto sulla directory virtuale IIS che lo contiene.
Un endpoint WCF configurato, ad esempio, per utilizzare l'autenticazione digest HTTP deve risiedere in una directory virtuale IIS configurata anch'essa per consentire la medesima autenticazione. Combinazioni non corrispondenti di impostazioni IIS e impostazioni dell'endpoint WCF provocano un errore durante l'attivazione del servizio.