简而言之,我在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?如果是这样,我怎么能找到它?
谢谢, 亚伦
答案 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"