三台服务器中有一台服务器正在web场中使用状态服务器丢失会话

三台服务器中有一台服务器正在web场中使用状态服务器丢失会话,web,state,Web,State,简而言之,我在一个web场中有三台服务器,其中一台配置为状态服务器。其中两台服务器(包括状态服务器)正确地共享会话状态,但另一台服务器仍保留其自己的会话 以下是我所做的: 我修改了所有三台服务器上的web.config.comments文件,以便它们具有相同的machineKey条目 在状态服务器上,我已将AllowRemoteConnections注册表项更改为1。然后,我将ASP.Net状态服务设置为自动启动并将其打开 网站在所有三台服务器上都进行了配置,并且根站点在IIS中共享相同的标识。

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

以下是我所做的:

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

在状态服务器上,我已将AllowRemoteConnections注册表项更改为1。然后,我将ASP.Net状态服务设置为自动启动并将其打开

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

因此Web2和Web3可以设置/修改/销毁同一个会话,但Web1仍然使用自己的会话运行

经过几个小时的谷歌搜索,我在这里不知所措,所以非常感谢您的帮助

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

谢谢, 亚伦

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

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


这并不是真正回答您的问题,但根据我的经验,ASP.NET会话状态服务不应该扩展到多个服务器。它的性能不是很好(特别是在负载下),并且很难配置。我发现像memcached这样的分布式缓存更简单、更快


看一看

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

我在MetaBase.xml文件(C:\WINDOWS\system32\inetsrv)中搜索web应用程序。在一场点球比赛之后,我注意到在以下几行中有一点不同:

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

您是否更改了web.config.comments或web.config?您在64位服务器上吗?我检查了所有三台服务器上的应用程序路径,它们都完全匹配,包括区分大小写。由于我现在正在度假,我现在不能再检查一遍。如果这是正确的答案,我会重做悬赏。谢谢,我会看看这个。
AppRoot="/LM/W3SVC/103071637/Root"
AppRoot="/LM/W3SVC/103071637/ROOT"