Pregunta

Tengo una aplicación web que utiliza un proxy para invocar una operación en un servicio WCF que devuelve datos de un AS400, como las diferentes regiones de ventas asociadas con nuestras empresas, las diferentes tiendas que tenemos en el campo, etc.Estas regiones de ventas y tiendas no cambian con frecuencia, las tiendas solo se agregan quizás dos veces al año y las regiones han sido las mismas durante un par de años.

Supongo que mi confusión radica en InstanceContextMode.Solo devuelvo una lista de "regiones" y "tiendas" cuando el cliente proxy invoca Getregions() o GetStoresForRegion(int regionNumber)

Si configuro InstanceContextMode en único y tengo las regiones y tiendas inicializadas y completadas antes de cualquier llamada de operación de servicio, ¿esto ayudará de alguna manera?Básicamente, en este momento, se está realizando una búsqueda en la base de datos en cada llamada, y no creo que sea necesario.

Entonces, el usuario inicia sesión en la aplicación web -> página de la aplicación web -> tiene que cargar el menú desplegable de regiones -> el desarrollador web invoca el proxy para obtener regiones...pero esto sucede cuando cada usuario usa la aplicación web, por lo que básicamente cada vez que un usuario accede a la aplicación web, el proxy realiza una llamada a la base de datos. Creo que esto es una locura y un error en la forma en que configuro la operación del servicio. ¿O he entendido completamente mal algo?

Actualización: el servicio está alojado en IIS, por lo que toda esta pregunta podría ser discutible

¿Fue útil?

Solución

La recomendación básica de mejores prácticas sería utilizar servicios de instancia única por llamada.Es lo más fácil de crear, sin pesadillas de simultaneidad, etc.

PERO:por supuesto, cada vez que llama al servicio, se crea una instancia de servicio y se consulta el backend de la base de datos.

Si es posible, intenta seguir con esto.Intente colocar la lógica del almacenamiento en caché en la base de datos; si tiene suficiente RAM, la mayoría de los datos solicitados con frecuencia permanecerán en la memoria.

Ir a ConcurrencyMode = multiple en sus servicios WCF provoca que aparezcan todo tipo de problemas de concurrencia con los que debe tener mucho cuidado.Trate de evitar esto siempre que sea posible.

Pruebe primero por llamada, instancia única y optimice SÓLO si REALMENTE es necesario.

Bagazo

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