asp.net - 转移到服务器场中的不同服务器时,IsPostBack 为假?

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

详细信息:

  1. 两台服务器都配置了相同的机器 key ,我通过设置并打印出 session 对象的小调试页面验证了两台服务器上的实际 session 是相同的。

  2. 为了进一步验证 key 和 Id,我打印了 HttpRuntime.AppDomainAppId 的值和哈希机器 key (MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey") 和 sessionId Session.SessionID 并在两台服务器上获得相同的输出。我用了Session Debug page作为这个的基础。它的输出看起来像这样(我用虚拟值替换了我的实际 machinkey 哈希和 session 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. 站点的 ID(在站点高级设置下的 IISMgr 中找到)在所有服务器上都是相同的。

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

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

  6. 单步执行代码并阅读 IsPostBack 属性,看来我的问题是 Page 上的 this._fPageLayoutChanged 为真。但是,如果我理解正确的话,当回发发生时它应该是错误的? SO Question on its implementation

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

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

最佳答案

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

我收回那句话。在我们上次发布之后问题又回来了,所以添加机器 key 根本没有帮助。

https://stackoverflow.com/questions/11578596/

相关文章:

php - 递归菜单树函数

sql-server - MSDTC 设置/属性正在重置

qt - 如何制作标题为两行的 QGroupBox?

qt - 从 Qt Designer 上的不同项目读取 "resource"文件

ruby-on-rails-3 - Rails 应用程序占用所有服务器内存

c# - 不断将数据写入文件

symfony - doctrine2 ifnull

asp.net-mvc - asp.net razor中有类似eval()的函数吗?

scala - 如何将 request.body 转换为字节数组以计算 MD5?

linux-kernel - wait_for_completion 与 wakeup_interr