3

我有一个部署在两台服务器上的 asp.net 网站。在服务器前面有一个负载均衡器,将请求分发到两台服务器。为了存储会话,我们使用 SQL Server。我的问题是,如果用户转到该页面,按下一个按钮,然后负载均衡器恰好被路由到另一台服务器,该请求不会被识别为回发?为什么会这样,只要服务器共享相同的机器密钥,即使使用回发,它也不应该正常工作吗?

细节:

  1. 两台服务器都配置了相同的机器密钥,我通过我制作的一个小型调试页面验证了两台服务器上的实际会话相同,该页面设置并打印出会话对象。

  2. 为了进一步验证密钥和 ID,我打印了HttpRuntime.AppDomainAppId哈希机器密钥(MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey")和 sessionId的值,并Session.SessionID在两台服务器上获得了相同的输出。我使用Session Debug 页面作为基础。它的输出看起来像这样(我用虚拟值替换了我的实际机器键哈希和会话 ID):

    Current DataTime: 2012-07-20 10:52:58
    Current Session Mode: SQLServer
    HttpRuntime.AppDomainAppId: /LM/W3SVC/5/ROOT
    Hashed with the MachineKey: HjtOPW5dfoihdlkd+SdsfkEWfs0=
    Local Machine Name: 127.0.0.1
    Current Session ID: 2alsudhsdkjlhcmnsdfkhsdf
    
  3. 在站点的高级设置下的 IISMgr 中找到的站点 ID 在所有服务器上都是相同的。

  4. 只要我留在同一台服务器上,一切都会按预期工作。

  5. 当我在本地运行页面时(第一个请求到网络场,然后由提琴手将第二个按钮单击路由到本地主机),我得到相同的行为

  6. 单步执行代码并阅读IsPostBack属性,我的问题似乎是this._fPageLayoutChangedPage 是真的。但是,如果我理解正确的话,回发发生时它应该是错误的吗?SO 关于其实施的问题

  7. 两台服务器都运行 IIS 7。

  8. 两台服务器都运行带有 SP2 的 Windows Server Web 并安装了相同的 Windows 更新更新。另一方面,我的本地开发机器运行 Windows 7。

4

1 回答 1

0

事实证明,在 web.config 中添加 Machinekey 的手动条目可以解决问题。非常奇怪,因为我检查了它的全局值以及问题中详述的哈希值,但现在它可以工作了。

我收回之前说过的话。在我们上次发布后,问题又回来了,所以添加机器密钥根本没有帮助。

于 2012-09-17T12:48:55.167 回答