Servizi di hosting

Per diventare attivo, un servizio deve essere ospitato all'interno di un ambiente di runtime che lo crea e ne controlla il contesto e la durata. I servizi Windows Communication Foundation (WCF) sono progettati per essere eseguiti in qualsiasi processo di Windows che supporta codice gestito.

WCF fornisce un modello di programmazione unificato per la compilazione di applicazioni orientate ai servizi. Questo modello di programmazione rimane coerente ed è indipendente dall'ambiente di runtime nel quale viene distribuito il servizio. In pratica, ciò significa che il codice per i servizi interessati rimane praticamente invariato a prescindere dall'opzione di hosting.

Le opzioni di hosting vanno dall'esecuzione in una semplice applicazione console ad ambienti server come un servizio Windows in esecuzione in un processo di lavoro gestito da Internet Information Services (IIS) o dal servizio di attivazione dei processi di Windows (WAS). Gli sviluppatori scelgono l'ambiente host che soddisfa i requisiti di distribuzione del servizio. Questi requisiti potrebbero derivare dalla piattaforma sulla quale viene distribuita l'applicazione, il trasporto sul quale deve inviare e ricevere messaggi o sul tipo di riciclo del processo e gestione di altri processi richiesti per assicurare la disponibilità adeguata o su altri requisiti di gestione o affidabilità. Nella prossima sezione vengono fornite informazioni e istruzioni sulle opzioni di hosting.

Opzioni di hosting

Self-hosting in un'applicazione gestita

I servizi WCF possono essere ospitati in qualsiasi applicazione gestita. Questa è l'opzione più flessibile perché richiede la distribuzione di un'infrastruttura minima. Incorporare il codice per il servizio all'interno del codice dell'applicazione gestita, quindi creare e aprire un'istanza di ServiceHost per rendere il servizio disponibile. Per altre informazioni, vedere Procedura: Ospitare un servizio WCF in un'applicazione gestita.

Questa opzione consente due scenari comuni: servizi WCF in esecuzione all'interno di applicazioni console e applicazioni client ricche di funzionalità come quelle basate su Windows Presentation Foundation (WPF) o su Windows Form (WinForms). L'hosting di un servizio WCF all'interno di un'applicazione console in genere è utile durante la fase di sviluppo dell'applicazione. Agevola infatti il debug, l'ottenimento di informazioni di traccia per scoprire cosa accadde all'interno dell'applicazione e lo spostamento copiandole in nuove posizioni. Questa opzione di hosting consente inoltre ad applicazioni rich client, quali quelle WPF e Windows Form, di comunicare più facilmente con l'esterno. Ne è un esempio un client di collaborazione peer-to-peer che utilizza WPF per l'interfaccia utente e che ospita anche un servizio WCF che consente ad altri client di connettersi ad esso per condividere informazioni.

Servizi Windows gestiti

Questa opzione di hosting consiste nella registrazione del dominio dell'applicazione (AppDomain) che ospita un servizio WCF come servizio Windows gestito (precedentemente noto come servizio NT) affinché la durata del processo del servizio sia controllata da Gestione controllo servizi (SCM, Service Control Manager) per i servizi Windows. Analogamente all'opzione di self-hosting, questo tipo di ambiente host richiede che venga scritto codice di hosting come parte dell'applicazione. Il servizio viene implementato sia come servizio Windows che come servizio WCF, di conseguenza eredita sia dalla classe ServiceBase che da un'interfaccia di contratto del servizio WCF. ServiceHost viene quindi creato e aperto all'interno di un metodo OnStart(String[]) sottoposto a override e chiuso all'interno di un metodo OnStop() sottoposto a override. È inoltre necessario implementare una classe del programma di installazione che eredita da Installer per consentire l'installazione del programma come servizio Windows tramite Installutil.exe. Per altre informazioni, vedere Procedura: Ospitare un servizio WCF in un servizio Windows gestito. Lo scenario reso possibile dall'opzione di hosting del servizio Windows gestito è quello di un servizio WCF di lunga durata ospitato all'esterno di IIS in un ambiente protetto non attivato da messaggi. La durata del servizio è controllata invece dal sistema operativo. Questa opzione di hosting è disponibile in tutte le versioni di Windows.

Internet Information Services (IIS)

L'opzione di hosting di IIS è integrata con ASP.NET e utilizza le funzionalità offerte da queste tecnologie, ad esempio riciclo del processo, chiusura per inattività, monitoraggio dell'integrità del processo e attivazione basata su messaggi. Nei sistemi operativi Windows XP e Windows Server 2003, questa è la soluzione preferita per ospitare applicazioni del servizio Web che devono essere estremamente disponibili ed estremamente scalabili. IIS offre inoltre la gestione integrata che i clienti si aspettano da un prodotto server aziendale. Questa opzione di hosting richiede che IIS sia configurato correttamente, ma non richiede la scrittura di codice di hosting come parte dell'applicazione. Per altre informazioni su come configurare l'hosting IIS per un servizio WCF, vedere Procedura: Ospitare un servizio WCF in IIS.

I servizi ospitati da IIS possono utilizzare solo il trasporto HTTP. L'implementazione in IIS 5.1 ha introdotto alcune limitazioni in Windows XP. L'attivazione basata su messaggi fornita per un servizio WCF da IIS 5.1 su Windows XP impedisce a qualsiasi altro servizio WCF self-hosted nello stesso computer di utilizzare la porta 80 per comunicare. I servizi di WCF possono essere eseguiti nello stesso AppDomain/Pool di applicazioni/Processo di lavoro di altre applicazioni quando sono ospitati da IIS 6.0 in Windows Server 2003. Dato che WCF e IIS 6.0 utilizzano entrambi lo stack HTTP (HTTP.sys) della modalità kernel, a differenza di IIS 5.1, IIS 6.0 può invece condividere la porta 80 con altri servizi WCF indipendenti in esecuzione sullo stesso computer.

Servizio di attivazione dei processi di Windows (WAS, Windows Process Activation Service)

Il servizio di attivazione dei processi di Windows (WAS, Windows Process Activation Service) è il nuovo meccanismo di attivazione del processo per Windows Server 2008 disponibile anche su Windows Vista. Mantiene il modello di processo (pool di applicazioni e attivazione del processo basata su messaggi) e le funzionalità di hosting (ad esempio protezione rapida da errori, monitoraggio dell'integrità e riciclo) classiche di IIS 6.0, ma rimuove la dipendenza da HTTP dall'architettura di attivazione. IIS 7.0 utilizza WAS per eseguire l'attivazione basata su messaggi su HTTP. Anche i componenti aggiuntivi di WCF si collegano a WAS per fornire l'attivazione basata su messaggi sugli altri protocolli supportati da WCF, ad esempio TCP, MSMQ e named pipe. Ciò consente alle applicazioni che utilizzano protocolli di comunicazione di utilizzare funzionalità IIS quali il riciclo del processo, la protezione rapida da errori e il sistema di configurazione comune che erano disponibili solo per applicazioni basate su HTTP.

Questa opzione di hosting richiede che WAS sia configurato correttamente, ma non richiede la scrittura di codice di hosting come parte dell'applicazione. Per altre informazioni su come configurare l'hosting di WAS, vedere Procedura: Ospitare un servizio WCF in WAS.

Scegliere un ambiente di hosting

Nella tabella seguente vengono riepilogati alcuni dei vantaggi e degli scenari principali associati a ogni opzione di hosting.

Ambiente host Scenari comuni Vantaggi e limitazioni principali
Applicazione gestita ("indipendente") - Applicazioni console utilizzate durante lo sviluppo.
- Applicazioni client ricche di funzionalità WinForm e WPF che accedono ai servizi.
- Flessibile.
- Facile da implementare.
- Non è una soluzione aziendale per i servizi.
Servizi Windows (precedentemente noti come servizi NT) - Un servizio WCF di lunga durata ospitato al di fuori di IIS. - Durata del processo del servizio controllata dal sistema operativo, non attivata da messaggi.
- Supportato da tutte le versioni di Windows.
- Ambiente sicuro.
IIS 5.1, IIS 6.0 - Esecuzione di un servizio WCF side-by-side con contenuto ASP.NET su Internet utilizzando il protocollo HTTP. - Riciclo del processo.
- Chiusura per inattività.
- Monitoraggio dell'integrità del processo.
- Attivazione basata su messaggi.
- Solo HTTP.
Servizio di attivazione dei processi di Windows (WAS, Windows Process Activation Service) - Esecuzione di un servizio WCF senza installare IIS su Internet utilizzando vari protocolli di trasporto. - IIS non è richiesto.
- Riciclo del processo.
- Chiusura per inattività.
- Monitoraggio dell'integrità del processo.
- Attivazione basata su messaggi.
- Funziona con HTTP, TCP, named pipe e MSMQ.
IIS 7.0 - Esecuzione di un servizio WCF con contenuto ASP.NET.
- Esecuzione di un servizio WCF su Internet utilizzando vari protocolli di trasporto.
- Vantaggi di WAS.
- Integrato con contenuto ASP.NET e IIS.

La scelta di un ambiente host dipende dalla versione di Windows sulla quale è distribuito, dal trasporto necessario per inviare i messaggi e dai requisiti per il tipo di riciclo del dominio dell'applicazione e del processo. Nella tabella seguente sono riepilogati i dati relativi a tali requisiti.

Ambiente host Disponibilità della piattaforma Trasporti supportati Riciclo di processo e AppDomain
Applicazioni gestite ("indipendenti") Windows XP, Windows Server 2003, Windows Vista,

Windows Server 2008
HTTP,

net.tcp,

net.pipe,

net.msmq
No
Servizi Windows (precedentemente noti come servizi NT) Windows XP, Windows Server 2003, Windows Vista,

Windows Server 2008
HTTP,

net.tcp,

net.pipe,

net.msmq
No
IIS 5,1 Windows XP HTTP
IIS 6.0 Windows Server 2003 HTTP
Servizio di attivazione dei processi di Windows (WAS, Windows Process Activation Service) Windows Vista, Windows Server 2008 HTTP,

net.tcp,

net.pipe,

net.msmq

È importante notare che l'esecuzione di un servizio o di una qualsiasi estensione da un host non attendibile compromette la sicurezza. Quando si apre un ServiceHost in caso di utilizzo della rappresentazione, un'applicazione deve controllare che l'utente non si sia disconnesso, ad esempio memorizzando nella cache l'elemento WindowsIdentity dell'utente.

Vedi anche