Actualmente estamos haciendo una revisión de nuestro diseño de servicio WCF y una cosa que me molesta es la decisión entre Per-Call y Servicios por sesión. Creo que entiendo el concepto detrás de ambos, pero realmente no veo la ventaja de los servicios Per-Call. Entiendo que la motivación para usar los servicios Per-Call es que un servicio WCF solo contiene un objeto de servidor durante la vida de una llamada, lo que limita el tiempo que la instancia de servicio tiene un recurso costoso, pero para mí es mucho más fácil de usar el modelo más parecido a OO por sesión donde su instancia de objeto proxy siempre corresponde a la misma instancia de objeto de servidor y simplemente maneja los recursos caros de forma manual.WCF: servicios por llamada y por sesión ... necesitan convencer que Per-Call vale la pena
Por ejemplo, supongo que tengo un servicio CRUD con Add, Update, Delete, Select methods en él. Esto podría hacerse como un servicio Per-Call con conexión de base de datos (el "recurso costoso") instanciado en el constructor de objetos del servidor. Alternativamente, podría ser un servicio por sesión con una conexión de base de datos instanciada y cerrada dentro de cada método CRUD expuesto.
Para mí no es un recurso diferente y simplifica el modelo de programación ya que el cliente puede estar seguro de que siempre tienen el mismo objeto de servidor para sus proxies: se mantiene cualquier estado costoso que pueda haber entre llamadas y no se necesitan parámetros adicionales en los métodos para identificar qué datos de estado debe recuperar el servicio cuando está instanciando un nuevo objeto de servidor nuevamente (como en el caso de Per-Call). Es como usar clases y objetos, donde se aplican los mismos problemas de administración de recursos, pero no creamos nuevas instancias de objetos para cada llamada de método que tenemos sobre un objeto.
Entonces, ¿qué me falta con el modelo Per-Call?
Gracias
No sé mucho sobre balanceo de carga y enrutamiento, pero en el caso de no saber cómo usan sus clientes sus proxies, se aplica el mismo argumento: codifique los objetos de su servidor para que no se aferren a recursos costosos, entonces no importa si el cliente no cierra el proxy. también parece estar en contradicción con lo que he leído en el libro Juval Lowys WCF, donde se afirma: "Si un servicio por llamada fuera verdaderamente sin estado, no habría necesidad de que por llamada en el primer lugar. Es porque el servicio ha declarado que necesita el modo Per-Call ". Aparte del equilibrio/enrutamiento de carga, todavía no veo la diferencia. – MrLane
La distinción se destaca más en la escalabilidad, pero si esos no son la consideración, entonces estoy de acuerdo con su comentario anterior. En un servidor de carga pesada, digamos que su servicio se llama 10k veces en 5 minutos desde diferentes clientes, en la configuración por sesión, el host deberá mantener vivo este objeto de sesión de 10k y agruparlo para su estado de arrendamiento. Esto claramente tendrá una sobrecarga en la memoria y el rendimiento del servidor. –