2008-12-01 19 views

Respuesta

5

Además de las cosas que Guy Starbuck mencionó, un factor clave sería el modelo de seguridad que está utilizando (junto con los requisitos de la sesión): si no reutiliza su proxy, no puede volver a utilizarlo. usa una sesión de seguridad

Esto significa que el cliente debería autenticarse con cada llamada que es un desperdicio.

Sin embargo, si usted decide que esto es lo que desea hacer, asegúrese de configurar el cliente para no establecer un contexto de seguridad (ya que nunca se va a usar), esto le ahorrará un par de ida y vuelta al servidor :-)

3

Hay un corolario aquí para objetos de servidor activados en .NET Remoting (una de las tecnologías que se sustituye por WCF), que tienen dos modos, "sola llamada" (sin estado) y "Singleton" (estado).

El enfoque que adopte en WCF debe basarse en sus requisitos de rendimiento y escala junto con las necesidades de sus consumidores, así como las limitaciones de diseño del lado del servidor.

Si tiene que mantener el estado entre las llamadas al servicio, obviamente querrá tener una instancia con estado, pero si no lo hace probablemente debería implementarlo para que sea estático, lo que debería escalar mejor (puede cargar más fácilmente el equilibrio, etc.).

+0

creo que Brian estaba preguntando por la reutilización de proxy de cliente. Esto no es relevante para el ciclo de vida de la instancia del lado del servidor –

+0

Mi voto a la baja se debe a la misma razón que Andrey. No veo qué tiene que ver InstanceManagement en el servidor con la vida útil del proxy del cliente. ¿Tal vez podrías explicarlo? –

+0

Ambos tienen razón, parece que originalmente interpreté que la pregunta estaba relacionada con el ciclo de vida del servidor, no con el proxy del cliente. Voy a continuar y dejar mi respuesta aquí como parte de la discusión, ya que se hace referencia en las respuestas de otras personas. –

5

Un punto más a considerar son las fallas del canal. Por diseño, WCF no permite usar el proxy del cliente después de que ocurriera una excepción no controlada.

IMyContract proxy = new MyContractClient(); 
try 
{ 
    proxy.MyMethod(); 
} 
catch 
{} 

//Throws CommunicationObjectFaultedException 
proxy.MyMethod(); 
15

o es mejor crear uno y volver a usarlo?

No empiece a implementar su propia implementación de agrupamiento. Eso ya se ha hecho en el marco. Un proxy WCF utiliza fábricas de canales en caché debajo. Por lo tanto, crear nuevos proxies no es demasiado caro (¡pero vea la respuesta de Guy Starbuck con respecto a las sesiones y la seguridad!).

También tenga en cuenta que un proxy caduca después de un cierto tiempo de inactividad (10 minutos por defecto).

Si desea un control más explícito, puede considerar el uso de ChannelFactories y canales directamente en lugar de los proxys de ClientBase "fáciles de usar, completos de fábrica".

http://msdn.microsoft.com/en-us/library/ms734681.aspx

Y una "lectura obligatoria" con respecto a este tema es: http://blogs.msdn.com/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx