Asp.net使用多个服务器形成身份验证IIS 7.5

Dav*_*rge 1 asp.net iis-7 timeout iis-7.5

我有一个在Windows 2008 R2(IIS 7.5)上运行的Asp.Net Web应用程序.我有两个服务器WWW1和WWW2,DNS记录设置为循环DNS为"www".我增加了AppPool超时和会话状态超时设置,因此用户不会在20分钟后退出.但是我注意到用户正在随机登出.我认为发生的事情是用户访问www.foo.com并登录,然后一段时间循环将它们导航到集群中的对面服务器(WWW1或WWW2),其中没有创建cookie,因此提示他们登录.

我怎样才能使用循环DNS来保持我的高可用性解决方案?

Gle*_*ens 7

这里的问题是每个服务器在内存中维护自己的会话状态,并且不知道在其他服务器上创建的sesssions.

要解决此问题,您需要使用StateServer或SQLServer会话状态提供程序,而不是使用默认的InProc会话状态提供程序.

要做到这一点,你需要确保ASP.NET状态服务可在您的一台服务器上运行,然后你需要下面的配置项添加到应用程序的web.config文件的system.web节,更换'SampleStateServer',其中包含运行ASP.NET状态服务的服务器的名称:

    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
Run Code Online (Sandbox Code Playgroud)

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" />
Run Code Online (Sandbox Code Playgroud)

有几个网站会为您生成密钥.我通常使用http://aspnetresources.com/tools/machineKey

如果您想使用SQLState提供程序,http://msdn.microsoft.com/en-us/library/ms178586.aspx具有页面的"Sql Server Mode"部分下的所有配置信息.由于您必须配置一个用于存储状态的数据库,因此设置稍微复杂一些.