2009-05-03 17 views
36

Como actualmente estoy aprendiendo a utilizar los servicios de WCF, constantemente encuentro tutoriales en Internet que mencionan el uso de un ServiceHost cuando se utiliza un servicio de WCF.WCF: ¿Qué es un ServiceHost?

¿Qué es exactamente ServiceHost?


En mi proyecto actual que estoy usando un servicio WCF y tener una referencia a ella desde mi aplicación y cuando quiera consumir desde mi aplicación que acaba de instanciar su ServiceClient como tales:

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

y luego acceder a mis métodos web (s) OperationContract de esa instancia (obviamente abrirlo antes de consumir el método y cerrándolo después con Open y Close)

Mi El servicio WCF es host en mi IIS y solo tengo acceso al .svc desde mi aplicación para crear una instancia del ServiceClient.

Entonces, ¿por qué y dónde se usa ServiceHost?

Respuesta

29

Un ServiceHost básicamente le proporciona todo lo que necesita para alojar un servicio WCF en una configuración que no sea IIS o WAS. Un lugar común para un ServiceHost sería en una aplicación de consola o servicio de Windows. Vea el código de ejemplo de MSDN para how to setup a ServiceHost in a console app.

+18

Casi correcta. - incluso IIS y WAS usarán un ServiceHost para alojar su Servicio WCF; simplemente lo crean y lo derriban automágicamente a sus espaldas. –

+4

Sí, solo estaba tratando de describir cuándo verías un ServiceHost en tu propio código. Por lo general, el desarrollador no accede directamente a IIS/WAS ServiceHost. –

+0

Sí, es correcto, el ServiceHost es casi invisible en el escenario IIS/WAS :) –

23

La implementación de su servicio es solo una clase .NET; necesita tener un entorno de tiempo de ejecución para poder ejecutarlo de alguna manera. Para eso sirve el ServiceHost: cargará su clase de servicio, configurará los puntos finales y oyentes del canal y todo eso y le dará a su clase de servicio un "ecosistema" para vivir y operar.

Puede crear instancias un ServiceHost clasifique usted mismo en una aplicación de consola, un servicio de Windows o incluso una aplicación de Winforms, y así haga que su clase de servicio WCF esté disponible para el mundo exterior, o puede delegar ese trabajo a IIS o WAS. Incluso IIS O fue utilizará un ServiceHost para alojar su servicio WCF - simplemente lo hacen automagicamente detrás de las escenas, y "a la carta" - cada vez que una solicitud de su servicio WCF viene en

Marc

+1

¿usaría eso en las pruebas TDD donde desea probar llamadas como el envío de encabezados o datos específicos a la solicitud http (WebOperationContext) a los métodos de servicio wcf? – PositiveGuy

Cuestiones relacionadas