这里的问题是每台服务器都在内存中维护自己的会话状态,并且不知道在另一台服务器上创建的会话。
为了解决这个问题,您需要使用 StateServer 或 SQLServer 会话状态提供程序,而不是使用默认的 InProc 会话状态提供程序。
为此,您需要确保 ASP.NET 状态服务正在您的一台服务器上运行,然后您需要将以下配置项添加到应用程序的 web.config 文件的 system.web 部分,替换'SampleStateServer' 与您正在运行 ASP.NET 状态服务的服务器的名称:
<sessionState mode="StateServer"
stateConnectionString="tcpip=SampleStateServer:42424"
cookieless="false"
timeout="20"/>
Microsoft 的相关文档可在http://msdn.microsoft.com/en-us/library/ms178586.aspx获得
因为您在 Web 场中运行它,您还需要确保两台服务器上的 Web 应用程序使用相同的加密密钥。
为此,您需要在 web.config 中设置一个 machineKey 条目,其中涉及将如下条目添加到 web.config 的 system.web 部分:
<machineKey validationKey="4D0590A0E4DE163BAD0EEEB6747467D770CD5FB2EA95BF02B27787A45CA579DECB01E2A1F16563DBAB44C1C0E54C7E53D65F2A7D0FDF378F4D3702B3F2C8B165" decryptionKey="928771D7B1B8C32608F56AC428EC5902985F6FB2E6E9A78733B6EAA493FA13F5" validation="SHA1" decryption="AES" />
有几个网站会为您生成密钥。我通常使用http://aspnetresources.com/tools/machineKey
如果您想改用 SQLState 提供程序, http: //msdn.microsoft.com/en-us/library/ms178586.aspx在页面的“Sql Server 模式”部分下提供了所有配置信息。由于您必须配置一个用于存储状态的数据库,因此设置会稍微复杂一些。