2010-01-25 7 views
7

Estoy pensando en autohospedar mi servicio WCF en lugar de usar IIS. Una gran pregunta para mí es si necesito crear una instancia de múltiples servidores de servicio como lo hace IIS o uno será suficiente.¿Cuáles son los beneficios para varios servicehosts? ¿Un ServiceHost admite varias conexiones simultáneas en un punto final?

¿Los servicios de mantenimiento muptiple dan algún beneficio excepto las razones de seguridad para el aislamiento?

¿Puede un servidor de servicio servir múltiples conexiones en un punto final simultáneamente?

Respuesta

11

No hay ningún beneficio o opción, realmente - uno ServiceHost (instancia de esa clase) puede alojar exactamente un servicio, y para cada servicio, necesita un host de servicio separado. Es un mapeo 1: 1 - siempre, no hay elección.

Pero, por supuesto, su servicio de Windows NT o aplicación de consola puede tener múltiples objetos ServiceHost activos al mismo tiempo. Esto puede ser útil si tiene un conjunto de servicios que lógicamente pertenecen y que realmente no pueden existir sin el otro, donde no tiene sentido que uno de ellos se inicie y otro no se inicie.

Y sí, un host de servicio puede alojar un servicio que expone múltiples puntos finales, y múltiples clientes pueden conectarse en esos puntos finales separados al mismo tiempo, no hay problema. El tiempo de ejecución de WCF generará una cantidad de subprocesos de trabajo para manejar las solicitudes entrantes (puede limitar aquellas con el comportamiento de ServiceThrottling) independientemente una de la otra.


de configurar y de control, el número de llamadas simultáneas y pide que tenga, usted tendrá que buscar en el comportamiento ServiceThrottling en el lado del servidor.

<behaviors> 
    <serviceBehaviors> 
     <behavior name="serviceThrottled"> 
      <serviceThrottling 
       maxConcurrentCalls="16" 
       maxConcurrentInstances="26" 
       maxConcurrentSessions="10"/> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 

y hay que hacer referencia a que la configuración de comportamiento en servicio en su declaración de servicio, por supuesto:

<service name="YourService" behaviorConfiguration="serviceThrottled"> 
    ..... 
</service> 

Estos son los valores por defecto. Las explicaciones son como sigue (tomado de entrada en el blog de Dan Rigsby, acortado):

  • MaxConcurrentCalls (por defecto = 16) [Per-mensaje] El número máximo de mensajes que activamente se puede procesar.

  • MaxConcurrentInstances (predeterminado = 26) El número máximo de objetos InstanceContext en un servicio que se puede ejecutar a la vez. Para el servicio por sesión, esto equivale a la cantidad máxima de sesiones, para el servicio por llamada, es la cantidad máxima de llamadas simultáneas, y para las llamadas individuales, no tiene sentido.

  • MaxConcurrentSessions (predeterminado = 10) [Por canal] El número máximo de sesiones que un servicio puede aceptar a la vez. Sólo entra en juego con los enlaces basados ​​en la sesión (wsHttp o netTcp)

Definitivamente también echa un vistazo Dan Rigsby's excellent blog post sobre el tema.

+0

No, la situación que me interesa es cuando tengo un servicio lógico con un punto final, pero necesito una conexión simultánea múltiple al servicio desde varios clientes (aunque usando un tipo de punto final). – flashnik

+0

@flashnik: eso definitivamente no es un problema.De manera predeterminada, son posibles 10-16 llamadas simultáneas en el servicio, sin importar en qué punto final se encuentren en el –

+0

. ¿Podría explicar cómo puedo variar esta cantidad? – flashnik

Cuestiones relacionadas