example - Las mejores prácticas para WCF Service Proxy lifetime?
wcf soap service c# (4)
Cuando trabaje con servicios de WCF, ¿es mejor crear una nueva instancia del servicio cada vez que la use? ¿O es mejor crear uno y volver a usarlo? ¿Por qué es mejor cualquiera de los enfoques? ¿Es lo mismo para los proxies asincrónicos?
Aquí hay un corolario de objetos activados por servidor en .NET Remoting (una de las tecnologías que reemplaza WCF), que tienen dos modos, "Single Call" (sin estado) y "Singleton" (con 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) equilibrio, etc.).
además de las cosas que Guy Starbuck mencionó, un factor clave sería el modelo de seguridad que estás usando (junto con los requisitos de la sesión): si no reutilizas tu proxy, no puedes reutilizar las sesiones de seguridad. .
Esto significa que el cliente debería autenticarse con cada llamada que es un desperdicio.
Sin embargo, si decide que esto es lo que desea hacer, asegúrese de configurar el cliente para que no establezca un contexto de seguridad (ya que nunca lo usará), esto le ahorrará un par de viajes de ida y vuelta al servidor :-)
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( );
¿O es mejor crear uno y volver a usarlo?
No empieces a implementar tu 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 agota el tiempo de espera después de un cierto tiempo de inactividad (10 minutos por defecto).
Si desea un control más explícito, puede considerar usar ChannelFactories y canales directamente en lugar de los proxies de ClientBase "fáciles de usar, completos de fábrica".
http://msdn.microsoft.com/en-us/library/ms734681.aspx
Y una "lectura obligada" 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