2009-06-24 22 views
12

Tengo una configuración de contenedor de inyección de dependencia en mi aplicación y estoy pensando que componer el contenedor cada vez que entre una solicitud de servicio WCF será ineficiente.¿Cuál es el ciclo de vida de un servicio WCF hospedado por IIS (http)?

¿Alguien me puede explicar, para un servicio WCF hospedado http/IIS, cuál es el ciclo de vida del servicio? Si puedo resolver esto, puedo tomar una decisión informada sobre dónde se almacenará, instanciará, destruirá el contenedor, etc.

Respuesta

23

Si su InstanceContextMode es PerCall, la clase de servicio se creará desde cero para cada solicitud entrante, y luego se eliminará cuando haya terminado.

Si su InstanceContextMode es PerSession, la clase de servicio se crea y se utiliza para dar servicio a un cliente determinado por la duración de la sesión (o hasta que un "InactivityTimeout" se encuentra, o se produce un error).

Si su InstanceContextMode es individual (Singleton), se creará la clase de servicio cuando la primera solicitud entra y permanece en la memoria, siempre y cuando las solicitudes siguen llegando, siempre y cuando no se produce ningún error y sin InactivityTimeout es alcanzado.

¡Así que lo tienes! Por supuesto, la modalidad de simultaneidad (por PerSession y Single servicios) también entran en juego para hacer las cosas un poco más "interesante"

+0

¡Agradable! Gracias, exactamente la respuesta que quería. –

+2

Para configurar esto, agrega un ServiceBehaviorAttribute a su clase de servicio. Este es el mío que coincide muy bien con ninject: [ServiceBehavior (InstanceContextMode = InstanceContextMode.PerCall)] – Twisted

0

Depende de su ServiceBehavour. Específicamente this y this.

1

Como usted menciona que estuviera tratando de integrar la creación de instancias servicio WCF con un contenedor de inyección de dependencias, Solo me gustaría decir que he tenido una experiencia muy positiva usando el Castle WCF Integration Facility para hacer justamente eso.

Es específico para el contenedor de inyección de dependencia Castle Windsor pero, al ser de código abierto, puede mirar dentro y comprender algunos de los desafíos y soluciones proporcionados.

Cuestiones relacionadas