
ASP.NET AJAX Load Balancing Issues对于在App_Code文件夹中具有代码并使用硬件负载平衡器的任何人来说,这都是一个问题。 确实可以将硬件负载平衡器设置为粘性会话以解决该问题,但是在理想情况下,我希望该功能关闭。 当App_Code文件夹中的文件未对站点进行预编译时,iis将为这些文件生成随机文件名。
因此,当用户发布页面并将其转移到其他服务器时,将无法进行任何操作。 有人对此有解决方案吗? 我可以更改为预编译的网站,但是我们的质量检查部门将无法推广已更改的文件。
两台服务器上的 您可以覆盖web.config中的machine.config文件进行设置。这需要匹配,否则您可能会遇到类似这样的奇怪情况。 好的,首先要做的是... MachineKey是对的。在所有负载平衡计算机上,绝对应将其设置为相同。我不记得它会影响到的所有事情,但是无论如何都要做。 第二,继续并预编译该站点。实际上,只要页面有.cs文件被重新编译,您实际上仍然可以推出新版本。棘手的是将app_code文件编译成单个dll。但是,如果在那里进行了更改,则可以上载新的dll,再次一切都可以。 为了使事情变得更加简单,请启用"使用的固定命名和单页程序集"选项。这样可以确保每个编译中的名称都相同,因此您只需测试然后替换更改后的.dll文件即可。 综上所述,您不应该再遇到任何问题。该请求将发送到IIS,IIS将仅提供该页面并根据需要进行编译。如果后面的代码在每台计算机上都不同,那么实际上没关系,代码是相同的,并且该计算机将引用其自己的代码。实际的请求/回传不知道或不关心任何一个。我上面说的所有内容都应该有助于简化操作,但是无论如何它都应该起作用……所以这可能是一个机器钥匙问题。 您的负载均衡器是否支持粘性会话?启用此功能后,平衡器将在特定时间窗口内一遍又一遍地将相同IP路由到同一服务器。这样,来自一个客户端的所有请求(AJAX或其他方式)将始终命中群集/场中的同一服务器。 我认为asp.net模型对加密和特定于计算机的存储有相当大的依赖性,因此我不确定它是否可以避免会话使用粘性IP。 我不了解ASP.NET AJAX(我改用MonoRail NJS方法),但是会话状态可能对您来说是个问题。 您必须确保会话状态是可序列化的,并且不要使用InMemory会话。您可能需要运行ASP.NET会话状态服务器,以确保整个前端服务器场都使用相同的会话存储。在这种情况下,会话必须是完全可序列化的(这就是为什么会话中没有任何对象是首选的原因,您必须始终使用ID,我敢打赌MS在进行AJAX库开发时会坚持这一限制) 如果您的质量检查部门可以提升整个库,则可以将app_code中的所有内容移至外部类库。我认为,如果您找不到方便或可忍受的切换到预编译站点的方式,那么您就会陷入棘手的会议。 似乎仅适用于ViewState加密。它不会影响自动编译的程序集的文件名。 确实可以将硬件负载平衡器设置为粘性会话以解决该问题,但是在理想情况下,我希望该功能关闭。 如果它是硬件负载平衡器,那么您就不会有问题,因为众所周知的就是请求URL,服务器可以在其中编译请求的页面并为其提供服务。 我能想到的唯一问题可能是会话和视图状态。 |