IIS / WCF静态方法Threadsafety

时间:2015-03-13 10:17:48

标签: c# wcf iis

在从IIS运行的WCF中,我有这个代码(类似的东西)。

public static class Test
{
   public static int Method(int x, int y)
   {
      int p = 10;
      int r = p * x * y;
      return r;
    }
}

理论上,这种方法可以同时从100万不同用户的100万个请求中调用。

我与同事讨论 ,我的立场是这个方法调用的每个实例都是独立的,并且决不会导致调用之间的数据损坏。这个帖子支持这个:C# : What if a static method is called from multiple threads?

我的同事声称IIS和WCF是一种特殊的怪物,可以在各种奇怪的地方缓存和启动/停止呼叫,这样实际上这些呼叫实际上可以相互干扰。

他所做的例子是,如果一个调用在方法内,另一个调用新的参数,那么int xint y参数变量值可能会被替换为已经在进行的调用。

他的立场绝不是在IIS / WCF相关的任何方面使用static方法/类。

我还没有能够找到任何支持这两种情况的可靠文档,任何人都想在此处提出一些很好的文档参数?

1 个答案:

答案 0 :(得分:3)

事实并非如此。

.NET代码无法干扰其他代码的执行。例如,它不能缓存调用或停止调用或导致本地变量不共享。 CLI规范明确规定了静态方法的执行方式。

即使WCF框架的作者想做这样的事情,他们也不能。 (至少没有CLR运行时支持。)

如果突然不再安全地调用静态方法(!)那段代码仍然可以运行?!你甚至无法拨打string.Join

WCF没有这样的事情。您的同事现在需要提供一些证据来证明他所声称的内容。这种令人发指的主张往往源于该人所造成的令人困惑的经历。也许他通过使方法非静态并在没有意识到的情况下做其他事情来修复错误。现在他相信静态属性是导致bug的原因。这可能导致迷信。