2009-07-17 13 views
7

Estoy probando servicios web por una idea que he tenido. Al ejecutar depuración, parece que la clase de servicio web ejemplifica cada vez que un cliente llama a un método en el servicio web. Puedo ver esto al ver que se llama al constructor cada vez que llamo a un método. Solo crea una instancia del servicio web proxy una vez en el cliente.¿Se crea una instancia del servicio web .NET con cada llamada a método?

Esto significa que tendría que almacenar todos los datos entre llamadas y significa que si uso un databse tendré que volver a conectarme con cada llamada a un método.

Eso no puede ser correcto?

+0

¿Por qué? Así es como funcionan las páginas web y un servicio web es realmente solo una página web con una función alternativa. –

+0

Oh, claro. Como una página web. ¡Molestia! Probaré la idea de WCF Gracias – Richard210363

+0

Spencer Ruport: Si no ha tratado con páginas web u otros frameworks sin estado anteriormente, parecerá extraño al principio. Después de todo, en un marco con estado no tendrá que hacer todo ese trabajo adicional varias veces. – Halvard

Respuesta

3

Para ASMX, es correcto y en gran medida una buena cosa. Los servicios deben ser tan sin estado como sea posible, y si realmente necesita almacenar algo entre llamadas, entonces puede usar un singleton. Sin embargo, no creo que se pueda utilizar una conexión de base de datos, ya que están almacenados en la memoria caché y, de todos modos, usted desea realizar un alcance de su uso.

Si desea que un solo objeto permanezca vivo entre las llamadas, WCF ofrece esta opción. Dado que ASMX es obsoleto, es posible que desee pasar a WCF.

+1

Tal vez no del todo obsoleto. "Legado" es la palabra que MS usa. –

+0

Eso es muy discreto de ellos. –

5

Eso es realmente correcto.

Los servicios web (en una arquitectura orientada a servicios) son apátridas (no recuerdan nada entre llamadas ... toda persistencia de datos depende de usted).

Si busca lo suficiente en la web, encontrará intentos de crear servicios web con estado (que sí tienen su lugar, pero van en contra de los principios principales de SOA). Sin embargo, descubrirá que no alivian sus preocupaciones. Obtendrá una instancia nueva de clase con cada llamada y todas las conexiones a la base de datos tendrán que volver a crearse.

2

Sí, eso es 100% correcto. Cada vez que el servidor recibe una solicitud, se crea una instancia de un nuevo objeto para manejar la solicitud en un hilo separado.

Esto es lo mismo que sucede con un formulario web ASP.NET básico.

Cuestiones relacionadas