无法向会话状态服务器发出会话状态请求

无法向会话状态服务器发出会话状态请求

大约 4-5 个月以来,我似乎一直遇到这个零星问题 - 主要发生在我们一天中最繁忙的时段,即上午 10:30-11:45,此时 Microsoft NLB 群集中的所有 Windows 2003 Web 服务器都开始抛出会话状态服务器错误。示例错误如下。

System.Web.HttpException: Unable to make the session state request to the session state server. Please ensure that the ASP.NET State service is started and that the client and server ports are the same.  If the server is on a remote machine, please ensure that it accepts remote requests by checking the value of HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection.  If the server is on the local machine, and if the before mentioned registry value does not exist or is set to 0, then the state server connection string must use either 'localhost' or '127.0.0.1' as the server name.
   at System.Web.SessionState.OutOfProcSessionStateStore.MakeRequest(StateProtocolVerb verb, String id, StateProtocolExclusive exclusiveAccess, Int32 extraFlags, Int32 timeout, Int32 lockCookie, Byte[] buf, Int32 cb, Int32 networkTimeout, SessionNDMakeRequestResults& results)
   at System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem)
   at System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

现在,我在所有服务器都与之通信的集中式后端 Windows 2003 服务器上使用 ASP.NET 状态服务。

在出现此问题之前,我最初也使用了 SQL Server 状态几年。SQL wqas 的问题在于,当问题发生时,它会产生阻塞情况,这实际上会影响所有服务器上的所有用户。产品公司建议我使用标准 ASP.NET 状态服务,因为这是他们在技术支持的服务。我不知道为什么这会产生影响——但我别无选择,只能尝试一下!

我尝试创建多个应用程序池、添加其他服务器、将 TCP/IP 超时时间从 20 秒改为 30 秒,甚至致电 Microsoft ASP.NET 产品支持,但收效甚微。我甚至建议他们检查是否使用只读会话状态,而不是每个页面请求都进行读/写 — — 据我所知,这基本上会导致每个页面都往返于状态服务器,即使页面上未使用状态。

不幸的是,该应用程序是由我们的产品公司开发的,他们坚持认为这是我的环境的问题,因为其他客户没有遇到此类问题。但是,我与其他客户交谈过,他们告诉我,当他们看到类似的问题时,他们基本上不得不创建另一个 Web 场。这个问题几乎看起来像是我在应用程序中达到了某种架构限制……

微软对这个问题的立场是,会话状态需要减少,并且状态服务器报告的返回代码表明缓冲区已满。

为了更好地了解问题的范围(而不是等待客户打电话投诉),我安装了 ELMAH 并将其配置为在发生未处理的异常时向我发送电子邮件。在活动高峰期,我基本上会收到 500-1000 封电子邮件!

如果有人有其他我可以尝试的想法或更好的解决问题的方法,我将不胜感激。

答案1

当应用 MS 补丁 KB967723 时,我们开始遇到 .net 应用程序与远程 .Net 状态服务器通信的问题。您可以查看是否已将该补丁应用于 Web 服务器,然后尝试将其撤消。

答案2

测量应用程序在典型会话中在会话状态中存储了多少数据,以及 Web 服务器和状态服务器之间的数据包捕获,以测量高峰使用期间的总数据量。

答案3

您可能需要增加可用的 TCP 端口数(默认值为 5000)。我曾见过因端口数不足而导致的类似问题(不是会话状态问题)。

相关内容