无需停机的负载均衡部署网页时避免无效的ViewState(Avoiding invalid view

2019-08-01 10:09发布

下面是这种情况:

  1. 我们有3个Web服务器A,B,C。
  2. 我们要释放的应用程序的新版本,无需将申请下来
    (例如,不使用“停机维护页”)。
  3. 服务器A上线与最新的代码。
  4. 服务器B被带离线路。 在服务器B用户被路由到A和C.
  5. Page1.aspx的与新的控制更新。 任何人都来自服务器B到服务器A,而
    当他们执行此页面上的动作此页面上会得到一个视图状态错误。 这就是我们要防止。

如何做一些你解决这个问题?

这里有一些想法,我们有(无论是可能的,或者不使用我们的负载平衡器,我不知道......我不熟悉的负载平衡器配置[这是一个F5]):

更原始的方法:

取下服务器A和B和更新。 Ç保留旧代码。 所有车辆将被引导到C,这是很正常的,因为它是旧代码。 当A和B与更新去住,如果可能的话告诉负载平衡器,只限于下与活动会话的人和所有的新会话获得A和B发起这种方法的问题在于,在理论上会话可以坚持围绕如果用户一直使用的应用程序很长一段时间。

少幼稚的做法:

类似于幼稚的做法,但(如果可能的话)我们要谈的“安全”页面,这是没有改变的页面负载平衡器。 当最终用户“安全”页面上结束了,他或她被路由到服务器A或B.从理论上来说,用户可能永远不会在这些网页上的一个土地,但这种做法是有点风险较小(但需要更多的工作)。

Answer 1:

我假设你的负载平衡器正常操作期间引导个人用户返回到Web场中的同一服务器,这就是为什么你通常不会遇到此问题,但只有当你启动服务器之间将用户重定向。

如果这个假设是正确的,那么很可能这个问题是整个服务器农场不一致的machineKey。

ViewState是散列对服务器,以防止通过在客户端侧的用户篡改的机键。 计算机密钥由IIS自动生成的,并且将改变的每个服务器重新启动或复位时,以及作为唯一的每个服务器的时间。

为了确保你不打视图状态验证问题,当用户在服务器之间移动有作用的两种可能的课程。

  1. 禁用单个页面或在全球范围内使用enableViewStateMac用假属性值的web.config文件的页面元素的防篡改保护。 我提到这纯粹是为了完整起见-你永远不应该这样做,在生产网站。

  2. 手动生成计算机密钥并在每个应用程序共享相同的值(你可以使用相同的密钥为所有应用程序,但它是明智的使用每个应用程序的一个关键最大限度的保障),请将每台服务器上的。 要做到这一点,你需要生成密钥( 使用任何您可以在互联网上看到的演示,这违背了独特的机械按键的目的),这可以通过程序或在IIS管理器中完成(见HTTP:// WWW。 codeproject.com/Articles/221889/How-to-Generate-Machine-Key-in-IIS7 )。 部署网站,所有服务器时,请使用同一台机器密钥。

我不能在最佳实践回答了升级需要100%的正常运行时间的应用。



文章来源: Avoiding invalid viewstate when deploying on a load balanced website without downtime