使用Web场中的State Server丢失会话中的一台服务器

时间:2012-03-05 17:26:05

标签: web state

简而言之,我在Web场中有三台服务器,其中一台配置为State Server。其中两台服务器(包括State Server)正在共享会话状态,但另一台服务器仍在保持自己的会话状态。

这就是我所做的:

我修改了所有三台服务器上的web.config.comments文件,以便它们具有相同的machineKey条目。

在State Server上,我已将AllowRemoteConnections注册表项更改为1.然后将ASP.Net State Service设置为自动启动并将其打开。

在所有三台服务器上配置网站,并且根站点在IIS中共享相同的Identifer。每个配置都是相同的。网站本身包含在网络共享中,因此在所有三个服务器上都使用相同的web.config文件。我将web.config中的sessionState条目更改为指向Web3。

所以Web2和Web3能够设置/修改/销毁同一个会话,但Web1仍然在运行它自己。

经过数小时的谷歌搜索,我在这里不知所措,所以非常感谢任何帮助。

此应用程序将几个子目录配置到根站点中。这个级别是否有单独的AppID?如果是这样,我怎么能找到它?

谢谢, 亚伦

3 个答案:

答案 0 :(得分:2)

http://support.microsoft.com/kb/325056

  

要在Web场中的不同Web服务器之间维护会话状态,Microsoft Internet信息服务(IIS)元数据库中的Web站点(例如,\ LM \ W3SVC \ 2)的应用程序路径必须对所有人都相同Web场中的Web服务器。案例也需要相同,因为应用程序路径区分大小写。

     

在一台Web服务器上,承载ASP.NET应用程序的网站的实例ID可能为2(其中应用程序路径为\ LM \ W3SVC \ 2)。在另一个Web服务器上,Web站点的实例ID可能是3(其中应用程序路径为\ LM \ W3SVC \ 3)。因此,Web场中的Web服务器之间的应用程序路径是不同的。有关如何检查网站的应用程序路径的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:

     

240225 Description of Adsutil and MetaEdit Used to Modify the Metabase

答案 1 :(得分:0)

这并没有真正回答你的问题,但根据我的经验,ASP.NET会话状态服务不是你应该扩展到多个服务器的东西。它表现不佳(特别是在负载下)并且难以配置。我发现像memcached这样的分布式缓存为此目的更加简单和快捷。

看看this project

答案 2 :(得分:0)

事实证明,马修克的答案几乎是正确答案。一年后,我又回到了这里,找到了答案。虽然可能是正确的,但我觉得如果上面的答案更具体,我会解决这个问题!

我搜索了Web应用程序的MetaBase.xml文件(C:\ WINDOWS \ system32 \ inetsrv)。经过一场比赛的差异,我注意到以下一行有一点点差异:

<IIsWebVirtualDir   Location ="/LM/W3SVC/103071637/root"
    AccessFlags="AccessRead | AccessScript"
    AppFriendlyName="Default Application"
    AppIsolated="2"
    AppRoot="/LM/W3SVC/103071637/Root"
...

具体来说,服务器1上的AppRoot(不是位置)有一个Proper-Case“Root”,而Server 2和3的上限为“ROOT”。我更新了服务器1以匹配并重新启动IIS,它可以解决问题。

AppRoot="/LM/W3SVC/103071637/Root"
AppRoot="/LM/W3SVC/103071637/ROOT"