2011-09-02 20 views
10

Tengo una aplicación que reutiliza el mismo canal WCF una y otra vez. Mantengo una referencia estática a través de un objeto de fábrica. Me pregunto si esta es una buena práctica o si debo abrir x canales y hacer un ciclo completo de todas las llamadas de servicios a través de estos canales en lugar de usar un solo canal.Funcionamiento único del canal WCF frente a canales múltiples

¿Estas llamadas a los servicios se ponen en cola si se usa solo 1 canal o sucede lo mismo cuando usaría x canales?

Respuesta

11

Debe usar una fábrica de un solo canal para todas las solicitudes, pero se deben construir diferentes canales para cada solicitud. Nunca vuelva a utilizar los canales. No son caros de crear y no son seguros para subprocesos. Lo que es costoso de crear es la fábrica de canales. Es seguro para hilos y puede ser reutilizado. Por supuesto, si la fábrica de canales entra en estado de falla, es posible que deba volver a abrirla.

+1

Así que aferrarse al ICommunicationObject devuelto por _channelFactory.CreateChannel() no es una buena idea? Ahora mantengo 1 canal abierto para todas las solicitudes, no hago un _channelFactory.CreateChannel() para cada llamada, reutilizo el estático creado la primera vez. –

+1

@Bjorn Bailleul, no es una buena idea en absoluto. Las instancias devueltas por '_channelFactory.CreateChannel()' deben vivir lo más breve posible y nunca volver a utilizarse. Como dije, la llamada 'CreateChannel' no es costosa. Es muy rápido. Puede llamarlo para cada solicitud. Lo que es costoso es la creación de la fábrica de canales. Esto es lo que podrías almacenar en caché. –

+1

@Darin - ¿Tiene referencia o enlace para "utilizar un canal diferente para cada llamada". Este blog es uno de los artículos más referenciados sobre fábricas de canales y su primera mejor práctica es "Reutilizar el mismo proxy": http://blogs.msdn.com/b/wenlong/archive/2007/10/27/performance -improvement-of-wcf-client-proxy-creation-and-best-practices.aspx – ErnieL

6

@Darin Dimitrov

Reutilizar el mismo proxy En muchos casos, usted quiere volver a usar el mismo proxy. Esto tiene el mejor rendimiento. Es especialmente cierto cuando usa funciones de seguridad ya que la negociación de seguridad inicial puede tener un alto costo.

proxy es igual a canal. si nos fijamos en this blog post, se puede ver el siguiente fragmento de código:

ISimpleContract proxy = factory.CreateChannel(); 
((IClientChannel)proxy).Open(); 

Por otra parte, si va a trabajar con las sesiones, que no desea establecer una nueva sesión para cada solicitud (mediante la creación de un nuevo canal/proxy cada vez).

Cuestiones relacionadas