Condividi tramite


Procedura: ospitare un servizio WCF in un servizio Windows gestito

In questo argomento vengono delineati i passaggi di base necessari per creare un servizio Windows Communication Foundation (WCF) ospitato da un servizio Windows. Lo scenario viene abilitato dall'opzione di host del servizio Windows gestito che è un servizio WCF con esecuzione prolungata ospitato all'esterno di Internet Information Services (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.

I servizi Windows possono essere gestiti con Microsoft.ManagementConsole.SnapIn in Microsoft Management Console (MMC) e possono essere configurati per essere avviati automaticamente all'avvio del sistema. Questa opzione host è costituita dalla registrazione del dominio dell'applicazione (AppDomain) che ospita un servizio WCF come servizio Windows gestito, in modo che la durata del processo del servizio venga controllata da Gestione controllo servizi per i servizi Windows.

Il codice del servizio include un'implementazione del contratto di servizio, una classe di servizio Windows e una classe del programma di installazione. La classe di implementazione del servizio, CalculatorService, è un servizio WCF. CalculatorWindowsService è un servizio Windows. Per essere qualificata come servizio Windows, la classe eredita da ServiceBase e implementa i metodi OnStart e OnStop. In OnStart, viene creata e aperta una classe ServiceHost per il tipo CalculatorService. In OnStop, il servizio viene interrotto ed eliminato. L'host è inoltre responsabile di fornire un indirizzo di base all'host del servizio, che è stato configurato nelle impostazioni dell'applicazione. La classe del programma di installazione, che eredita da Installer, consente al programma di essere installato come servizio Windows dallo strumento Installutil.exe.

Costruire il servizio e fornire il codice host

  1. Definire il contratto di servizio ICalculator utilizzando un'interfaccia per il servizio calcolatrice nel file Service.cs.

  2. Implementare il contratto di servizio in una classe CalculatorService nel file Service.cs come servizio WCF impostandone l'ereditarietà dall'interfaccia WCF ICalculator.

  3. Implementare il servizio Windows impostandone l'ereditarietà dalla classe ServiceBase. Eseguire l'override del metodo OnStart per creare e aprire un'istanza di ServiceHost. Eseguire l'override del metodo OnStop per chiudere l'istanza di ServiceHost. Creare un'istanza dell'istanza di CalculatorService e denominarla "WCFWindowsServiceSample". Fornire un punto di ingresso per l'applicazione.

  4. Creare una classe ProjectInstaller che eredita da Installer e che sia contrassegnata con l'attributo RunInstallerAttribute impostato su true, in modo che, al momento dell'installazione dell'assembly, venga richiamato il programma di installazione di azioni personalizzate di Visual Studio o Installutil.exe.

  5. Fornire l'indirizzo di base per il servizio nella configurazione.

Installare ed eseguire il servizio .

  1. Compilare il servizio per generare l'eseguibile Service.exe.

  2. Digitare installutil bin\service.exe al prompt dei comandi per installare il servizio Windows. Lo strumento si trova nella directory di installazione di Microsoft.NET Framework, se il percorso non è già impostato. Digitare services.msc al prompt dei comandi per accedere a Gestione controllo servizi. Il servizio WINDOWS dovrebbe essere visualizzato in Servizi come "WCFWindowsServiceSample". Il servizio WCF può rispondere ai client solo se il servizio WINDOWS è in esecuzione. Per avviare il servizio, fare clic con il pulsante destro del mouse su di esso in Gestione controllo servizi e scegliere "Avvia" o digitare net start``WCFWindowsServiceSample al prompt dei comandi.

  3. Se si apportano modifiche al servizio, è prima necessario arrestare il servizio e disinstallarlo. Per arrestare il servizio, fare clic con il pulsante destro del mouse su di esso in Gestione controllo servizi e scegliere "Interrompi" o digitare net stop WCFWindowsServiceSample al prompt dei comandi. Si noti che se si arresta il servizio WINDOWS e quindi si esegue il client, si verificherà un'eccezione EndpointNotFoundException quando un client tenta di accedere al servizio. Per disinstallare il servizio WINDOWS digitare installutil /u bin\service.exe al prompt dei comandi.

Esempio

Nel codice seguente viene illustrato il contenuto del file Service.cs con il contratto, la relativa implementazione e il codice di installazione e hosting del servizio WINDOWS.

Analogamente all'opzione di self-hosting, l'ambiente host del servizio Windows richiede che venga scritto codice di hosting come parte dell'applicazione. Il servizio viene implementato come programma con estensione exe e contiene il proprio codice di hosting. In altri ambienti host, quali ad esempio l'host del servizio di attivazione dei processi di Windows (WAS, Windows Process Activation Service) in Internet Information Services (IIS), non è necessario che gli sviluppatori scrivano codice di hosting.

Vedere anche

Concetti

Hosting in un'applicazione gestita
Servizi host