我们的网站使用我们自己定制的 session 状态管理,与 ASP.NET session 状态分开。但是由于少数特殊页面使用 SQL Server Reporting Services,我们还需要启用 ASP.NET session 状态。由于我们处于负载均衡的环境中,因此我们启用了 ASP.NET State Server (aspnet_state.exe 或“进程外模式”)在单独的后端机器上。

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

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

--- 在更多故障排除后进行编辑 ---

正如下面一位用户所建议的,我尝试从头开始创建一个网站来重新测试这一点,而没有任何来自 httpHandlers、httpModules 或其他自定义逻辑的复杂情况。

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

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

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

    我将把它交叉发布到官方 ASP.NET 论坛,看看那里是否有任何大师可以提供一些启发。

    请您参考如下方法:

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


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!