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:
- 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.
- 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.
- 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.
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. –
No era consciente de eso :(. – Tarik
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. –