【问题标题】:ASP.NET AJAX Load Balancing IssuesASP.NET AJAX 负载平衡问题
【发布时间】:2008-09-08 21:46:25
【问题描述】:

对于在 App_Code 文件夹中有代码并使用硬件负载平衡器的任何人来说,这都是一个问题。确实可以将硬件负载平衡器设置为粘性会话来解决问题,但在理想情况下,我希望关闭该功能。

当App_Code文件夹中有一个文件,并且网站没有预编译iis时,会为这些文件生成随机文件名。

server1 "/ajax/SomeControl, App_Code.tjazq3hb.ashx"
server2 "/ajax/SomeControl, App_Code.wzp3akyu.ashx"

因此,当用户发布页面并转移到其他服务器时,没有任何效果。

有人对此有解决方案吗?我可以更改为预编译的网站,但我们的 QA 部门将无法仅宣传更改后的文件。

【问题讨论】:

    标签: asp.net load-balancing


    【解决方案1】:

    您是否将两台服务器上的 节点设置为相同的值?

    您可以覆盖 web.config 中的 machine.config 文件来进行设置。这需要匹配,否则你会遇到这样的奇怪情况。

    【讨论】:

    • 看起来 只影响 ViewState
    【解决方案2】:

    您的负载均衡器是否支持粘性会话?启用此功能后,平衡器将在特定时间窗口内一遍又一遍地将相同的 IP 路由到同一台服务器。这样,来自一个客户端的所有请求(AJAX 或其他)总是会到达集群/场中的同一台服务器。

    【讨论】:

    • 确实可以将硬件负载均衡器设置为粘性会话来解决问题,但在理想情况下,我希望关闭该功能。
    【解决方案3】:

    好的,首先要做的是……MachineKey 是真的。在所有负载平衡的机器上,这绝对应该设置为相同。我不记得它影响的所有内容,但无论如何都要这样做。

    其次,继续并预编译该站点。您实际上仍然可以推出新版本,只要页面有一个 .cs 文件,该页面就会重新编译。棘手的是被编译成单个 dll 的 app_code 文件。但是,如果在那里进行了更改,您可以上传新的 dll,一切都应该没问题。

    为了让事情变得更简单,请启用“使用的固定命名和单页程序集”选项。这将确保每次编译时都具有相同的名称,因此您只需测试然后替换更改的 .dll 文件。

    综上所述,您不应该遇到问题。请求转到 IIS,它只是提供页面并根据需要进行编译。如果每台机器上的代码不同,那真的没关系,代码是相同的,那台机器将引用它自己的代码。实际的请求/回发不知道也不关心这些。我上面所说的一切都应该有助于简化事情,但无论如何它应该可以工作......所以这可能是一个机器密钥问题。

    【讨论】:

      【解决方案4】:

      如果您的 QA 部门可以推广整个类库,您可以将 app_code 中的任何内容移至外部类库。如果您找不到方便或可容忍的方式来切换到预编译站点,我认为您会被粘滞会话所困扰。

      【讨论】:

      • 这是我解决此问题的唯一方法,无需打开粘性会话。
      【解决方案5】:

      如果它是一个硬件负载平衡器,你应该不会有问题,因为所有已知的都是请求 URL,服务器将在其中编译请求的页面并提供它。

      我能想到的唯一问题是会话和视图状态。

      【讨论】:

        【解决方案6】:

        确实可以将硬件负载平衡器设置为粘性会话来解决问题,但在理想情况下,我希望关闭该功能。

        【讨论】:

          【解决方案7】:

          似乎仅适用于 ViewState 加密。它不会影响自动编译程序集的文件名。

          【讨论】:

            【解决方案8】:

            我认为 asp.net 模型对加密和特定于机器的存储有很大的依赖性,所以我不确定它是否可以避免会话的粘性 IP。

            我不了解 ASP.NET AJAX(我改用 MonoRail NJS 方法),但会话状态对您来说可能是个问题。

            您必须确保会话状态是可序列化的,并且不要使用 InMemory 会话。您可能需要运行 ASP.NET 会话状态服务器以确保整个前端场使用相同的会话存储。在这种情况下,会话必须是完全可序列化的(这就是为什么会话中没有对象是首选的,你必须始终使用 ID,我敢打赌 MS 在进行 AJAX 库开发时会坚持这个限制)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-01-16
              • 2017-09-21
              • 1970-01-01
              • 2016-05-05
              相关资源
              最近更新 更多