Pregunta

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

Estoy buscando 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 perfilado mi aplicación cliente, pude ver que está tomando mucho tiempo para obtener el canal mientras se iniciaba el cliente proxy
  • ¿Debo usar un patrón Singleton para el proxy de cliente para que pueda utilizar la única instancia y una vez que deshacerse de la re-inicialización de cabeza? ¿Hay algún problema oculto con este enfoque?

Estoy utilizando .NET Framework 3.5 SP1, basicHttp unión con poca personalización.

¿Fue útil?

Solución

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. Se advierte sin embargo para comprobar el estado "con fallo" - Si ocurre un error en el servidor, el canal entre el proxy cliente y el servidor podría "falla" y por lo tanto su proxy cliente se convierte en inservible

.

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 almacenar en caché en algún lugar

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

IYourService client = factory.CreateChannel();

Se puede hacer este paso antes de cada llamada (o secuencia de llamada) y no debe conseguir mal desempeño de eso, en realidad.

No te recomiendo para evitar embarazos únicos siempre que sea posible - es como abrir una lata de gusanos, no lo haga a menos que sea absolutamente, tiene positivamente a (por ejemplo, para administrar el acceso a un único recurso que sólo está disponible para un llamante a la tiempo).

Marc

Otros consejos

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

Estoy totalmente de acuerdo con marc_s y rally25rs. Así que empieza allí, sino también considerar el uso de un proxy o envoltorio que se encarga de los estados de fallo. He aquí una pregunta sobre de manera que discute algunas soluciones y aquí es otra buena solución me encontré en el Internet, de Corneliu " la construcció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 sin embargo:.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top