2009-08-11 17 views
15

Solo quiero aprender por qué no puedo usar métodos web estáticos en servicios web? ¿Por qué está restringido?¿Por qué los métodos estáticos no son utilizables como operaciones de servicios web en los servicios web de ASMX?

¿Puede algún cuerpo darme una explicación concisa de esto.

+0

BTW, ¿sabe que Microsoft ahora considera que los servicios web ASMX son "tecnología heredada" y que han dejado de corregir errores allí? Deberías estar usando WCF. –

+0

No era consciente de eso :(. – Tarik

+1

Atarikg, WCF soporta servicios web básicos en su implementación, así como mucho más (es un marco enorme y completo). Es bastante astuto. No estoy seguro de si los métodos estáticos están permitidos en un servicio de WCF. –

Respuesta

23

La respuesta es: porque no se puede.

No está diseñado de esa manera. El diseño es que se creará una instancia de la clase de servicio web y luego se llamará a un método de instancia.

Solo puedo adivinar por qué Microsoft lo diseñó de esa manera. Para estar seguro, tendrías que preguntarles. Consideremos:

  1. No hay beneficio particular para permitir métodos estáticos. Cualquier cosa que pueda hacer con un método estático, también puede hacerlo con un método de instancia.
  2. Una clase [WebService] no está destinada a ser una clase arbitraria que se utiliza como un servicio web. Se supone que es una clase que ha creado con el fin de exponer las operaciones del servicio web. Como tal, no hay necesidad de admitir clases que ya existen y que ya tienen métodos estáticos.
  3. La implementación del encabezado SOAP permite que su clase contenga un campo de instancia de un tipo derivado de la clase SoapHeader. Este campo se rellenará con un encabezado SOAP entrante y/o contendrá el encabezado SOAP que se devolverá. No podría hacer esto con un campo estático, ya que se sobrescribirá con cada solicitud.

Como dije, todas estas son suposiciones. La respuesta correcta a la pregunta es: "no se puede porque así es como lo diseñó Microsoft. Si quiere saber por qué lo diseñaron de esa manera, debe preguntarles".


Fwiw, me acaba de comprobar, y no parece que WCF permite métodos estáticos para ser operaciones tampoco.

+0

+1 ¡Buena respuesta! :-) –

+3

Pero estoy preguntando por qué? No dirían simplemente "Bueno, no vamos a diseñar esto de esa manera, en cambio, va a ser diseñado de esta manera, bla, bla". Lo que estoy preguntando es la razón detrás de esto. – Tarik

+0

Gracias por la respuesta limpia y elaborada. – Tarik

3

Cuando un cliente crea un objeto para su servicio web, lo que realmente está creando es un objeto proxy para ese servicio web. Este objeto proxy maneja cosas como abrir y cerrar sus conexiones, así como todos los gastos generales de trabajar con el servicio web. Una llamada a un método estático sería difícil de gestionar. El "proxy estático" por falta de una mejor palabra tendría que hacer todas las cosas que la instancia del objeto proxy está haciendo cada vez que un cliente llama a uno de los métodos estáticos, lo que agrega una sobrecarga masiva.

+0

Estoy bastante seguro de que está hablando del lado del servidor, no del lado del cliente. –

+1

Mi respuesta responde a su pregunta de manera que creo que ayuda a explicar por qué los métodos estáticos del lado del servidor no funcionarían. Simplemente diciendo que los servicios web están diseñados para que no puedan, no dice por qué fueron diseñados de esa manera en primer lugar. –

+0

Pero esa no es la razón. Lo que sucede en el servidor tiene poco que ver con lo que ocurre en el cliente. No hay correspondencia entre el proxy del lado del cliente y la instancia del servicio web del lado del servidor. El lado del servidor no se crea una instancia simplemente porque el proxy del cliente sí lo está. En base a este razonamiento, tendré que rechazarlo. –

Cuestiones relacionadas