2009-05-03 15 views
36

Mentre sto imparando a utilizzare i servizi WCF, sto costantemente incontrando tutorial su Internet che menzionano l'utilizzo di un ServiceHost quando si utilizza un servizio WCF.WCF: Che cos'è un servizio di assistenza?

Che cosa è esattamente questo ServiceHost?


Nel mio progetto in corso si sta usando un servizio WCF e avere un riferimento ad esso dal mio app e ogni volta che voglio consumare dalla mia app ho solo istanziare la sua ServiceClient come tale:

new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), customBinding, endpointAddress); 

e quindi accedere i miei metodi web (s) OperationContract da tale istanza (ovviamente aprirlo prima di consumare il metodo e chiudendola poi con Open e Close)

mio Il servizio WCF è host nel mio IIS e accedo semplicemente allo .svc dalla mia app per creare un'istanza dello ServiceClient.

Quindi perché e dove è utilizzato lo ServiceHost?

risposta

29

Un ServiceHost fornisce in pratica tutto ciò che è necessario per ospitare un servizio WCF in un'impostazione non IIS o WAS. Un posto comune per un ServiceHost si trova in un'app console o in un servizio Windows. Vedere il codice di esempio da MSDN per how to setup a ServiceHost in a console app.

+18

Quasi corretta. - anche IIS e WAS useranno un ServiceHost per ospitare il tuo servizio WCF: lo creano e lo abbattono automagicamente alle tue spalle. –

+4

Sì, stavo solo cercando di descrivere quando vedresti un ServiceHost nel tuo codice. IIS/WAS ServiceHost non è generalmente accessibile direttamente dallo sviluppatore. –

+0

Sì, è vero - il ServiceHost è quasi invisibile nello scenario IIS/WAS :) –

23

L'implementazione del servizio è solo una classe .NET - è necessario disporre di un ambiente di runtime per esso, in modo che possa essere eseguita in qualche modo. Ecco a cosa serve ServiceHost: carica la classe di servizio, imposta gli endpoint e gli ascoltatori di canali e tutto ciò e quindi offre alla classe di servizio un "ecosistema" in cui vivere e operare.

È possibile creare un'istanza un ServiceHost classifica te stesso in un'app console, in un servizio Windows o persino in un'app Winforms, quindi rendi la tua classe di servizio WCF disponibile al mondo esterno o puoi delegare tale lavoro a IIS o WAS. Anche IIS o WAS userà un ServiceHost per ospitare il vostro servizio WCF - hanno appena fanno automagicamente dietro le quinte, e "on demand" - ogni volta che una richiesta per il vostro servizio WCF è disponibile in

Marc

+1

lo utilizzeresti nei test TDD in cui desideri testare chiamate come l'invio di intestazioni o dati specifici alla richiesta http (WebOperationContext) ai metodi di servizio wcf? – PositiveGuy