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:

  • Assicurarsi che IIS, WCF e il componente di attivazione 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.

Assicurarsi che IIS e WCF siano installati e registrati correttamente.

Perché i servizi WCF ospitati in IIS funzionino correttamente, è necessario che siano installati sia WCF che IIS. Le procedure per l'installazione di WCF (come parte di .NET Framework 3.0) e di IIS variano a seconda della versione del sistema operativo utilizzata. Per ulteriori informazioni sull'installazione di WCF e .NET Framework 3.0, vedere Microsoft .NET Framework 3.0 Redistributable Package. Le istruzioni per l'installazione di IIS sono reperibili nell'articolo sull'installazione di IIS (la pagina potrebbe essere in inglese).

Il processo di installazione per .NET Framework 3.0 registra automaticamente WCF in IIS, se IIS già è presente sul computer. Se IIS viene installato dopo .NET Framework 3.0, è richiesto un passaggio aggiuntivo per registrare WCF in IIS e ASP.NET. A tale fine, è possibile procedere come segue, a seconda del sistema operativo:

  • Windows XP SP2 e Windows Server 2003: utilizzare lo strumento ServiceModelReg.exe per registrare WCF con IIS. Per utilizzare questo strumento, digitare ServiceModelReg.exe /i /x al prompt dei comandi.
  • Windows Vista: installare il sottocomponente Componenti di attivazione di Windows Communication Foundation di .NET Framework 3.0. A tale scopo, scegliere Installazione applicazioni nel Pannello di controllo, quindi Installazione componenti di Windows. Viene attivata l'Aggiunta guidata componenti di Windows.

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 sta già ospitando contenuto ASP.NET 2.0 (ad esempio pagine aspx e servizi Web ASP.NET [ASMX]). Per ulteriori informazioni su queste opzioni, vedere le sezioni "Hosting di WCF side-by-side con ASP.NET" e "Hosting di 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. È possibile disattivare il riavvio. Per ulteriori 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 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 ulteriori 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 utilizzano lo stesso modello di compilazione dinamica 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 in linea provoca il riciclo e la ricompilazione dell'applicazione quando viene ricevuta la richiesta successiva.

Per ulteriori informazioni sul modello di compilazione ASP.NET 2.0, vedere l'articolo relativo alle informazioni generali sulla compilazione ASP.NET (la pagina potrebbe essere in inglese).

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 insieme di URI dell'indirizzo di base al costruttore ServiceHost o fornendo un elemento <host> nella configurazione del servizio. I servizi ospitati in IIS non hanno la capacità di controllare i propri indirizzi di base. Questi 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 è https://localhost/Application1/MyService.svc con la configurazione dell'endpoint seguente.

<endpoint address=”anotherEndpoint” … />

Tale configurazione fornisce un endpoint che può essere raggiunto all'indirizzo "https://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 https://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, https://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.

Protezione del trasporto HTTP

I servizi WCF ospitati in IIS possono avvalersi della protezione 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 che contiene il servizio supporti tali impostazioni. Le impostazioni di protezione del trasporto HTTP sull'associazione di un endpoint di hosting devono corrispondere alle impostazioni di protezione 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 danno origine a un errore durante l'attivazione del servizio.

Vedere anche

Concetti

Host in Internet Information Services
Procedure consigliate per l'hosting in Internet Information Services (IIS)