Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么ASP.NET即使在页面';s EnableSessionState=";假“;,但是只针对VB.NET站点,而不是C#站点?_.net_Asp.net_Vb.net_Asp.net 3.5_Session State - Fatal编程技术网

为什么ASP.NET即使在页面';s EnableSessionState=";假“;,但是只针对VB.NET站点,而不是C#站点?

为什么ASP.NET即使在页面';s EnableSessionState=";假“;,但是只针对VB.NET站点,而不是C#站点?,.net,asp.net,vb.net,asp.net-3.5,session-state,.net,Asp.net,Vb.net,Asp.net 3.5,Session State,我们的网站使用我们自己定制的会话状态管理,独立于ASP.NET会话状态。但由于少数特殊页面使用SQL Server Reporting Services,我们还需要启用ASP.NET会话状态。由于我们处于负载平衡环境中,因此在单独的后端计算机上启用了(aspnet_state.exe或“进程外模式”) 今天我注意到,当我们暂时关闭在我们的开发环境中运行状态服务的机器时,开发网站停止了工作(“无法向会话状态服务器发出会话状态请求”),尽管加载的页面上有EnableSessionState=“Fal

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

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

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

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

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

  • 我使用Visual Studio 2008使用VB.NET创建了一个新的“ASP.NET网站”
  • 我通过VS运行了该站点,允许它启用调试模式并生成一个标准的web.config文件
  • 我在
    元素下添加了
    ,并启动了本地ASP.NET状态服务”
  • 我将Default.aspx页面的EnableSessionState更改为False,并重新加载页面=OK
  • 我停止了ASP.NET状态服务并重新加载页面=“无法向会话状态服务器发出会话状态请求。”
  • 在这一点上,我感到困惑,因为其他用户声称他们尝试过类似的东西,但没有遇到相同的问题。因此我想知道这是否与使用VB.NET有关(尽管听起来很愚蠢)越来越多的人使用C#for ASP.NET,因此我用一个C#web站点重做了上面的测试,你瞧,访问页面时没有异常!我只有在将EnableSessionState设置为True并且实际访问了代码中的会话集合时才会得到异常

    这证明ASP.NET中的VB.NET站点在访问每个页面上的会话状态时表现稍有不同,即使该页面不需要。不幸的是,这并没有回答我最初的问题:为什么?


    我将把这篇文章交叉发布到ASP.NET官方论坛,看看那里是否有权威人士可以提供一些信息。

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

    您缺少了一些东西。因为在ASP.NET web表单中,默认设置为默认情况下,页面处理程序(页面类)未实现“IRequiresessionState”接口。我已在批量ASP.NET网站上尝试了您的案例:

  • 会话已在web.config(StateServer模式)中启用,而页面的EnableSessionState已禁用-对default.aspx的请求已在StateServer关闭的情况下成功处理
  • 启用页面的EnableSessionState后,它开始抛出类似您的异常

  • 您可以轻松地重复相同的实验。

    很抱歉,这可能看起来很明显,但您是否已选中Global。asax?

    每个页面请求都会命中基础会话提供程序,以标记存储会话访问时间,以便不会意外清理会话。无论EnableSessionState的值如何,以前的状态都为true不管会话状态模式如何(InProc、StateServer等等)。

    这是一个很好的调用。我检查了一下,在httpHandlers和httpModules下有了通常的ASP.NET Ajax内容。此外,我还有一个用于SSR的httpHandler,名为“ReportViewerWebControl”“通过Microsoft.Reporting.WebForms.HttpHandler。不幸的是,禁用所有这些处理程序并重新启动IIS没有帮助。如果关闭ASP.NET状态服务,我仍然会收到相同的“无法向会话状态服务器发出会话状态请求”。我将尝试按照下面pukipuki的建议从头开始重新创建站点。您是否正在使用SQL Server作为Session state?否,我们正在使用ASP.NET状态服务器(aspnet_state.exe)在单独的服务器上运行。但是除了少数页面外,EnableSessionState在所有页面上都设置为False。问题是,为什么ASP.NET在为不使用会话状态的页面提供服务时需要访问状态服务器?这似乎是一个性能问题,没有任何原因。您对此有过任何解决方案吗?@patmortech没有,一旦我们知道必须始终运行ASP.NET状态服务,这并不会真正影响我们的生产。最终,我们停止使用状态服务,因为我们意识到我们可以将web场的负载平衡器设置从“无”更改为“关联”,这意味着客户端将始终在会话中与同一台服务器通信,因此正常的ASP.Net进程会话状态更快、更简单。是的,我检查了所有代码,包括Global.asax.vb。唯一被覆盖的应用程序事件是Application_Error,它不使用会话状态,它只是重定向到一个自定义错误页面。我最终用一个空白站点重新测试了它,我发现了与主项目相同的行为。我在对原始问题的编辑中总结了我的步骤。很简单,看起来像是vb团队实现的iRequiresessionState接口)