TreeView和Postback

时间:2009-11-02 23:20:41

标签: asp.net treeview load-balancing

以下是我的情况:我将拥有一个带有TreeView控件的网页,该网页应该是可扩展/可折叠/可编辑的。到目前为止都很好。我知道在这个控件中大量使用了回发,这使我遇到了另一个特定于我们的生产设置的问题。

我们这里有2个Web服务器和一个负载均衡器,负载均衡器无法正常工作,遗憾的是无法保证该页面将被提交到同一个Web服务器。换句话说,当会话不记得你是谁或者会话中保存的任何变量(例如treeview viewstate)都会丢失时,可能会发生这种情况。

我需要确保我的treeview始终回发到同一台服务器。我的解决方案是首次加载页面时获取Web服务器的IP地址,并重写所有链接/按钮以指向该IP,专门绕过负载均衡器。问题出现在树视图中。如何确保它始终回发到同一个IP地址?

由于

2 个答案:

答案 0 :(得分:1)

Viewstate存储在表单中,而不是存储在会话变量中。如果您检查页面的html源代码,您应该会看到一个“_viewstate”隐藏的表单字段。

您可以尝试使用Cassini在本地计算机上运行此功能,以帮助隔离问题。

此外,这是应该避免会话变量的另一个例子。存储在会话中的任何内容也可以存储在数据库中,这是应该生存的地方。

答案 1 :(得分:1)

我认为这里的答案是纠正负载均衡器的情况,而不是破解它。

首先,为了清楚起见,Viewstate完全是将表单数据发布回服务器,因此这并不像Session数据那样存在问题。也就是说,如果您的服务器设置正确,您可以成功执行跨服务器回发并保留Viewstate。有关共享计算机密钥或禁用Viewstate键控的信息,请参阅Jeff Atwood's blog entry

对于会员内会议,当然你不能,所以这可能仍然是一个交易破坏者。你应该做的是:

  • 配置负载均衡器以支持会话关联,以便所有请求都转到同一服务器
  • 使用SQL会话或Web服务器之间共享的其他状态服务器