2011-11-01 8 views
8

Entonces, la pregunta es ¿WCF4 invoca la agrupación de conexiones del cliente al servicio WCF? Por ejemplo, tenemos aplicaciones ASP .NET como cliente y servicio (en máquinas separadas). A continuación, en alguna parte de código que tenemos algo así:¿WCF4 (.NET Framework 4) admite la agrupación de conexiones de clientes?

ServiceClient client = new ServiceClient(); 
// Here some work with service goes... 

digamos que tenemos otro servicio invocan en anither trozo de código:

ServceClient client2 = new ServiceClient(); 
// Another one processing... 

Así se CLIENTE2 conexión tomado del conjunto de conexiones?

+0

¿Qué tipo de grupo tiene en mente? Debe crear pools de clientes por su cuenta e implementar la lógica. Entonces la pregunta es un poco confusa. Consulte http://blogs.msdn.com/b/wenlong/archive/2007/11/14/a-sample-for-wcf-client-proxy-pooling.aspx. – sprinter252

+0

@ sprinter252 Me refiero a 'agrupación nativa' lo implementado por 'controlador de WCf'. Lo similar es la agrupación de conexiones ADO. – kseen

+1

Entonces la respuesta debería ser que depende del [ObjectPooling (MinPoolSize = 0, MaxPoolSize = 5)] - atributo definido en su servicio, supongo. – sprinter252

Respuesta

15

La "agrupación" depende del protocolo de transporte utilizado. Para HTTP, el WCF usa de manera predeterminada HTTP persistent connections, que vive durante un período de tiempo corto (son closed after 100s of inactivity) y puede ser reutilizado por solicitudes posteriores (incluso desde una instancia de proxy diferente). Para las tuberías TCP y con nombre WCF proporciona built-in pooling.

2

¿Por qué harías eso? WCF puede aceptar solicitudes múltiples sobre un cliente con ConcurrencyMode.Multiple. Por lo que no tendría mucho sentido para inicializar dos Clientes ..

WCF ServiceContract tiene tres atributos importantes para este comportamiento,

InstanceContextMode

  • PerSession (por sesión Crea una instancia de la Servicio)
  • Individual (Crea instancia única para cada cliente)
  • PerCall (Crea por llamada una instancia del servicio)

ConcurrencyMode

  • Múltiple (Cliente puede hacer varias llamadas al mismo tiempo -> multiproceso)
  • individual (cliente puede hacer una llamada y otra tienen que esperar hasta la otra llamada terminada)
  • Reentrant (El cliente puede realizar varias llamadas al mismo tiempo, no lo sé exactamente, pero creo que fue como si una llamada utilizara otro servicio wcf, otra puede procesarse hasta que se complete la otra llamada al servicio wcf, libera el bloqueo entre el tiempo de llamada de servicio WCF está hecho y la respuesta)

SessionMode

  • mascotas (Cliente puede utilizar una sesión, pero no tienen que)
  • NOTALLOWED (cliente no puede utilizar una sesión)
  • Obligatorio (cliente tiene que utilizar Sesión)

mayoría vez que utilizo InstanceContextMode.PerSession (porque el cliente 1 no tiene acceso a las Variables en el Servicio del Cliente 2), ConcurrencyMode.Multiple y SessionMode.Required.

También puede especificar cuántas instancias se pueden inicializar, cuántas llamadas simultáneas se pueden hacer y cuántas sesiones se pueden usar.

+0

Debería pasar más tiempo formateando su respuesta. Pocos leen respuestas mal formateadas (y, por lo tanto, obtendrás menos votos favorables) – jgauffin

+0

¿Cómo se relaciona tu respuesta con la pregunta? La sesión, el modo de contexto de la instancia y el modo de concurrencia no tienen nada que ver con la reutilización de la conexión de transporte; esa es la razón por la que existe la agrupación de conexiones. Incluso con todo lo que usted mencionó, la agrupación de conexiones se puede seguir utilizando debajo del cofre para mejorar el rendimiento. –

+0

Mi respuesta está relacionada con su Ejemplo, porque él está abriendo dos clientes ... Así que pensé que sería útil para él – RaphaelH

Cuestiones relacionadas