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

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

有些遗体可以给我简明扼要的解释。

答案是:因为你做不到。

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

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

  1. 允许静态方法没有特别的好处。 您可以使用静态方法执行任何操作,也可以使用实例方法。
  2. [WebService]类并不是一个恰好用作Web服务的任意类。 它是为了暴露Web服务操作而创建的类。 因此,不需要支持已经存在且已经具有静态方法的类。
  3. SOAP Header实现允许您的类包含从SoapHeader类派生的类型的实例字段。 该字段将填充传入的SOAP标头和/或将包含要返回的SOAP标头。 您无法使用静态字段执行此操作,因为它会被每个请求覆盖。

正如我所说,这些都是猜测。 这个问题的正确答案是,“你不能因为这就是微软设计它的方式。如果你想知道他们为什么这样设计它,你需要问他们”。


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

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