2009-11-05 18 views
5

Estoy consumiendo un servicio WCF y creé su proxy utilizando la referencia de servicio VS 2008.Inicialización de proxy de cliente WCF

Busco el mejor patrón para llamar al método servicio WCF

  • ¿Debo crear la instancia del proxy cliente cada vez que llamo el método de servicio y cerrar el cliente tan pronto como he terminado con eso? Cuando realicé un perfil de mi aplicación cliente, pude ver que está tardando mucho tiempo en obtener el Canal al inicializar el cliente proxy
  • ¿Debo usar un patrón Singleton para el proxy del cliente para poder usar la única instancia una vez y obtener deshacerse de la sobrecarga de reinicio? ¿Hay algún problema oculto con este enfoque?

Estoy usando .Net framework 3.5 SP1, enlace básicoHttp con poca personalización.

+0

@ 123Desarrollador: genial - gracias! (no es "fácil" para los recién llegados, estoy de acuerdo, por eso lo señalo) –

Respuesta

10

Depende ;-)

Si usted tiene una secuencia en su aplicación que requiere varias llamadas después de unos a otros, se puede colgar en el cliente de proxy y seguir usándolo para hacer más llamadas. Sin embargo, tenga cuidado de verificar el estado "fallado": si ocurre un error en el servidor, el canal entre el proxy del cliente y el servidor podría "fallar" y, por lo tanto, su proxy cliente queda inutilizable.

también - la parte más costosa es la creación de la ChannelFactory<T> - usted podría tratar de separar estos dos pasos a cabo al crear su proyx cliente en código:

ChannelFactory<IYourService> factory = new ChannelFactory<IYourService>(); 

Espera a que la fábrica de canal, por ejemplo caché en algún lugar

El segundo paso debe ser mucho menos intensivo en términos de tiempo y potencia:

IYourService client = factory.CreateChannel(); 

que podría hacer este paso antes de cada llamada (o secuencia de llamada) y no debe recibir todo el mal desempeño a cabo de eso, realmente.

Recomiendo evitar singletons siempre que sea posible, es como abrir una lombriz de gusanos, no lo haga a menos que sea absolutamente necesario (por ejemplo, para administrar el acceso a un único recurso que solo está disponible para una persona que llama a un momento).

Marc

+1

Estoy de acuerdo con el enfoque de crear una sola instancia de fábrica y no tener instancias de canal único. Para los canales, use em y suelto, y asegúrese de cerrarlos correctamente, verificando el estado de falla. – CodingWithSpike

0

Lo siento por levantando una vieja pregunta, pero quería añadir este para una fácil referencia.

Estoy completamente de acuerdo con marc_s y rally25rs. Así que comience allí, pero también considere usar un proxy o envoltorio que maneje estados con fallas. Here is a question en SO que analiza algunas soluciones, y here is another una buena solución que encontré en Internet por Corneliu, "Creación de un proxy ClientBase reutilizable". Su solución genera envoltorios que exponen sus métodos de servicio para la máxima comodidad y rendimiento. Todavía tengo que probar si funciona :).

Cuestiones relacionadas