Al trabajar 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?Mejores prácticas para WCF Service Proxy lifetime?
Respuesta
Además de las cosas que Guy Starbuck mencionó, un factor clave sería el modelo de seguridad que está utilizando (junto con los requisitos de la sesión): si no reutiliza su proxy, no puede volver a utilizarlo. usa una sesión de seguridad
Esto significa que el cliente debería autenticarse con cada llamada que es un desperdicio.
Sin embargo, si usted decide que esto es lo que desea hacer, asegúrese de configurar el cliente para no establecer un contexto de seguridad (ya que nunca se va a usar), esto le ahorrará un par de ida y vuelta al servidor :-)
Hay un corolario aquí para objetos de servidor activados en .NET Remoting (una de las tecnologías que se sustituye por WCF), que tienen dos modos, "sola llamada" (sin estado) y "Singleton" (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 el equilibrio, etc.).
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 empiece a implementar su 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 caduca después de un cierto tiempo de inactividad (10 minutos por defecto).
Si desea un control más explícito, puede considerar el uso de ChannelFactories y canales directamente en lugar de los proxys de ClientBase "fáciles de usar, completos de fábrica".
http://msdn.microsoft.com/en-us/library/ms734681.aspx
Y una "lectura obligatoria" 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
- 1. WCF Service Client Lifetime
- 2. WCF Mejores prácticas para métodos "sobrecargados"
- 3. Mejores prácticas para .Net WCF NAT Traversal
- 4. SQL Service Broker y .NET Windows Service: ¿mejores prácticas?
- 5. Directrices de nomenclatura de WCF/Mejores prácticas
- 6. ¿Mejores prácticas para versionar sus servicios con WCF?
- 7. Mejores prácticas para C#
- 8. WCF Service vs Windows Service
- 9. Registro para ASP.NET - Mejores prácticas
- 10. Mejores prácticas para la depuración
- 11. ¿Mejores prácticas para API seguras?
- 12. Mejores prácticas para almacenar configuraciones
- 13. ¿Mejores prácticas para autoguardar borradores?
- 14. Mejores prácticas para Magento Deployment
- 15. ¿Deshabilitar proxy web para un cliente WCF?
- 16. Uso de WCF en una aplicación ASP.Net y mejores prácticas
- 17. WCF Service and Threading
- 18. WCF Service Throttling
- 19. WCF Service authorization patterns
- 20. WCF Service netTCPbinding
- 21. wcf json web service
- 22. WCF Service Throttling
- 23. POST Múltiples parámetros para WCF Service
- 24. Mejores prácticas de Javascript
- 25. DTO: mejores prácticas
- 26. Mejores prácticas de NAnt
- 27. Guías y mejores prácticas para crear un sitio compatible con proxy
- 28. Mejores prácticas de Sitecore
- 29. mejores prácticas de ctags
- 30. Selenium, Nunit ¿Mejores prácticas?
creo que Brian estaba preguntando por la reutilización de proxy de cliente. Esto no es relevante para el ciclo de vida de la instancia del lado del servidor –
Mi voto a la baja se debe a la misma razón que Andrey. No veo qué tiene que ver InstanceManagement en el servidor con la vida útil del proxy del cliente. ¿Tal vez podrías explicarlo? –
Ambos tienen razón, parece que originalmente interpreté que la pregunta estaba relacionada con el ciclo de vida del servidor, no con el proxy del cliente. Voy a continuar y dejar mi respuesta aquí como parte de la discusión, ya que se hace referencia en las respuestas de otras personas. –