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.
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
@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 –
. ¿Podría explicar cómo puedo variar esta cantidad? – flashnik