小编Jam*_*ack的帖子

负载平衡的 IIS 7.5 Web 服务器 ASP.NET 会话状态问题

我们有一个 ASP.NET 网站的问题,其中用户的会话行为很奇怪 - 会话数据出现、消失和重新出现。

我想我知道问题是什么:

  1. 我们的设置是 2 x 负载均衡的 WebServers + 单会话状态数据库。
  2. ASP.NET SQL 会话状态存储似乎依赖于 IIS 网站实例 ID(元数据库 ID)来唯一标识传入会话 cookie ID 并检索/存储值。
  3. 网站的 IIS 网站实例 ID 在每个直播服务器上都不同(ID /W3SVC/1/Root在 WebServer A 上,ID /W3SVC/2/Root在 Webserver B 上)。
  4. 负载平衡不使用客户端亲缘关系,因此每个用户 HTTP 请求都可以转到任一服务器。

因此,当用户登录站点并四处走动时,每个 HTTP 调用都可以转到任一 Web 服务器,因此根据服务器使用具有不同 ID 的会话状态记录。实际上,用户将同时拥有 2 个单独的会话实例。我相信我已经验证这是在数据库ASPStateTempSessions表,每个会话cookie ID似乎对应于2几乎相同名称的记录(其ID只有最后几个字符,我相信是基于改性剂不同的AppIDAspStateTempApplications表)在几秒钟内创建。

因此,会话状态将表现为行为不端,因为对一个会话记录所做的更改只会在该 Web 服务器上持续存在。如果用户移动到另一个负载平衡的服务器,会话值似乎会消失或恢复。

我相信解决方案是同步站点的 IIS 实例 ID(例如,将它们都设置为/W3SVC/1/Root),但我尝试在 IIS 中的高级设置下编辑该值,尽管它保存正常,但它只是使站点在该服务器上返回 404,直到我将其改回。

我为这个问题找到了一个 VBS 脚本,但它似乎只适用于 IIS 6,所以我担心尝试它。有没有其他人在 IIS 7.5 …

iis windows-server-2008 asp.net iis-7.5

14
推荐指数
1
解决办法
2万
查看次数

标签 统计

asp.net ×1

iis ×1

iis-7.5 ×1

windows-server-2008 ×1