为什么ASP.NET即使在页面的EnableSessionState ="False"时也访问State Server,但仅限于VB.NET站点,而不是C#站点?

Jor*_*ger 7 .net vb.net asp.net session-state asp.net-3.5

我们的网站使用我们自己的自定义会话状态管理,与ASP.NET会话状态分开.但由于少数特殊页面使用SQL Server Reporting Services,因此我们还需要启用ASP.NET会话状态.由于我们处于负载平衡环境中,因此我们在单独的后端计算机上启用了ASP.NET状态服务器(aspnet_state.exe或"进程外模式").

今天我注意到,当我们暂时关闭在Dev环境中运行State Service的机器时,Dev网站停止工作("无法向会话状态服务器发出会话状态请求.")尽管EnableSessionState ="False"在正在加载的页面上.

在为不使用会话状态的页面提供请求时,为什么ASP.NET需要连接到State Service?即使页面不使用母版页,基页或任何用户控件,这似乎也会发生.我搜索了所有代码隐藏,以确保我们从不以编程方式重新启用会话状态或尝试访问它.

---更多故障排除后编辑---

正如下面的用户所建议的那样,我尝试从头开始创建一个网站来重新测试,而不会出现任何来自httpHandlers,httpModules或其他自定义逻辑的复杂情况.

  1. 我使用Visual Studio 2008 使用VB.NET创建一个新的"ASP.NET网站" .
  2. 我通过VS运行该站点,允许它启用调试模式并生成标准的web.config文件.
  3. <sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" /><system.web>元素下添加并启动了我的本地ASP.NET状态服务".
  4. 我将Default.aspx页面的EnableSessionState更改为False并重新加载页面= OK.
  5. 我停止了ASP.NET状态服务并重新加载了页面="无法向会话状态服务器发出会话状态请求".

在这一点上,我感到困惑,因为其他用户声称他们尝试了类似的东西并没有遇到同样的问题.所以我想知道它是否与使用VB.NET有关(虽然听起来很傻.)更多的人使用C#进行ASP.NET,所以我用C#网站重新进行了上面的测试,并且看到,当时没有例外.访问页面!如果我将EnableSessionState设置为True并实际访问代码中的Session集合,我只会遇到异常.

这证明ASP.NET中的VB.NET站点的行为略有不同,因为它们访问每个页面上的会话状态,即使页面不需要.不幸的是,这并没有回答我原来的问题:为什么?

我将把它交叉发布到官方的ASP.NET论坛,看看那里是否有任何大师可以解释一下.

Chr*_*ley 2

在您的 Web 应用程序中查找任何 HttpHandler 或 HttpModule。这些完全有可能需要会话状态,即使您的页面不需要。