如果您没有在负载均衡器中启用粘性会话,这可能会产生问题。因为您在视图中呈现文件,所以它可以在服务器 1 上呈现,并且对资产的请求实际上最终被路由到服务器 2,该文件可能尚未创建。
在网络农场场景中,我认为最好在 Application_Start 上创建您的包,然后使用缓存/命名方法之一在您的视图中呈现。
因此,如果您想继续渲染到静态文件,则在 application_start (global.asax.cs) 或下游(我喜欢 SquishIt 的专用初始化程序)中会有类似的东西
Bundle.JavaScript()
.Add("~/js/jquery-1.4.2.js")
.Add("~/js/jquery-ui-1.8.1.js")
.RenderNamed("bundleName", "~/js/combined_#.js") //2nd arg is used to resolve disk location
然后在您的视图中渲染:
<%= Bundle.JavaScript().RenderNamed("bundleName") %>
这将确保在服务器准备好响应请求时创建文件,代价是应用程序启动时间(确保您的应用程序池不会经常被回收!)。
资产控制器方法可能会更好,因为如果找不到捆绑包,它可以让您有机会恢复。你可以在这里阅读:https ://github.com/jetheredge/SquishIt/wiki/Using-SquishIt-programmatically-without-the-file-system
最后,使用 CDN 也可能是一个不错的选择。您可以在此处阅读(使用 Amazon S3 / Cloudfront,但这些想法适用于任何 CDN):http: //blogs.lessthandot.com/index.php/WebDev/ServerProgramming/making-squishit-work-with-亚马逊