2009-04-27 27 views
18

He puesto una instancia del proxy del cliente para el servicio WCF en una propiedad en la clase de la aplicación para que pueda obtenerla desde cualquier lugar de la aplicación.¿Cuándo cerrar el cliente de WCF?

No cierro el cliente, lo dejaré abierto mientras dure la aplicación. La razón principal de esto es que si tuviera que seguir // el comentario en la página mex de servicio WCF (la que obtiene si apunta un navegador a la URL del servicio WCF) dice // Siempre cierre el cliente. client.Close();

que está bien, excepto si llamo client.Close() justo después de hacer una llamada al método client.SomeAsync() entonces se cierra antes de que los resultados vuelvan. ¿Debería poner el cierre en el método Completed()? O debería olvidarme de cerrarlo, ya que una vez que está cerrado tengo que crear una nueva instancia del proxy del cliente (podría no guardarlo en la propiedad de la aplicación si ese es el caso.

gracias, Stephen

Respuesta

12

debe cerrarla como se aconseja. y sí, si estás usando los métodos asincrónicos entonces usted tiene que cerrar sólo después de que la llamada se completa.

Creación (apertura) y el cierre de los clientes es la norma para WCF clientes. No hay una penalización de rendimiento notable para la creación y el cierre continuo de nuevos clientes.

+0

recuerde agregar try catch on close también porque close puede causar excepciones. http://msdn.microsoft.com/en-us/library/ms405496.aspx. Lo uso así intente { client.Close(); } catch { client.Abort(); } –

+0

Tenga en cuenta que llamar a Dispose en ClientBase también dará como resultado que se llame a Close. –

1

E xplicitly cerrarlo preferentemente en un {} final de su método Completado. Por alguna razón, si el cliente permanece conectado, comenzará a bloquear otras llamadas de clientes. De acuerdo con el RFC HTTP:

Definido en 1999 (RFC 2616) “clientes que utilizan conexiones persistentes debería limitar el número de conexiones simultáneas que mantienen a un servidor determinado . Un cliente de un solo usuario NO DEBE mantener más de 2 conexiones con ningún servidor o proxy. Un proxy DEBE utilizar hasta 2 * N conexiones a otro servidor o proxy, donde N es el número de usuarios activos simultáneamente. Estos directrices están destinadas a mejorar los tiempos de respuesta HTTP y evitar la congestión .”Dado que los desarrolladores son usando AJAX o peticiones AJAX como a actualización de una página web http los límites son discuten cada vez más.

Con una carga si no está cerrando sus conexiones, es muy posible que comience a bloquear. Por supuesto, supongo que esto es HttpBinding.