为什么静态方法不能用作ASMX Web服务中的Web服务操作?

时间:2009-08-11 22:39:59

标签: c# asp.net web-services asmx

我只是想了解为什么我不能在Web服务中使用静态Web方法?为什么限制?

有些机构可以给我简明扼要的解释。

2 个答案:

答案 0 :(得分:23)

答案是:因为你做不到。

它不是那样设计的。设计是创建Web服务类的实例,然后调用实例方法。

我只能猜到为什么微软会这样设计它。要确定,你必须问他们。考虑:

  1. 允许静态方法没有特别的好处。您可以使用静态方法执行任何操作,也可以使用实例方法。
  2. [WebService]类并不是一个恰好用作Web服务的任意类。它旨在成为您为了公开Web服务操作而创建的类。因此,不需要支持已经存在且已经有静态方法的类。
  3. SOAP Header实现允许您的类包含派生自SoapHeader类的类型的实例字段。该字段将填充传入的SOAP标头和/或将包含要返回的SOAP标头。您无法使用静态字段执行此操作,因为它会被每个请求覆盖。
  4. 正如我所说,这些都是猜测。问题的正确答案是,“你不能,因为这就是微软设计它的方式。如果你想知道他们为什么这样设计它,你需要问他们”。


    FWIW,我刚检查过,WCF也不允许静态方法进行操作。

答案 1 :(得分:3)

当客户端为您的Web服务创建对象时,他们实际创建的是该Web服务的代理对象。此代理对象处理诸如打开和关闭连接以及实际使用Web服务的所有开销之类的事情。静态方法调用很难管理。缺少更好的单词的“静态代理”必须完成代理对象的实例在每次客户端调用其中一个静态方法时所做的所有事情,从而增加了大量的开销。