我在理解 IIS 如何处理其线程上的静态变量时遇到了一些麻烦。我的理解一直是,如果 IIS 有 4 个工作进程,它可以同时处理 4 个请求,并且它与有 4 个单独的线程运行网站相同。任何静态变量都将保留在每个单独的线程中。我有点困惑的原因是我已经创建了一个范围来管理连接和缓存事务。当我测试应用程序时,我没有注意到任何问题,但是在我编译它并从两个不同的位置同时点击它之后,我似乎遇到了一种冲突。现在,如果这些工作进程是分开的,为什么会这样呢?可以在单个工作线程上同时处理多个请求吗?这一点非常重要,因为在这些静态成员中保存了唯一的 ID,以处理管理这些功能的对象的升级,并且看起来它们正试图访问同一个对象。
我在 x64 机器上的 Vista 的 IIS 服务器上运行它。
编辑
对于需要在单个请求上通过线程持续存在的值,我将这些值放入Web.HttpContext.Current.Items
其中似乎可以解决问题。
<ThreadStatic()>
可以使用,但在整个请求过程中可能不可用。在我拥有的一个模块中,仅在变量上使用以指示该线程是否已经加载了 cahcing 服务器的设置。如果为真,则tread(不是asp.net)准备好从缓存服务器获取数据。