我的 Windows Server 2008 R2 Web 服务器上有一个 asp.net 4 电子商务网站。我将更新的 DLL 上传到 /bin 文件夹,当然该网站会重新编译。这是一个网站项目,而不是 Web 应用程序。大多数情况下,该网站不会重新启动,我会收到服务不可用错误(我认为是 503)。我必须通过 RDP 进入服务器并执行 IISRESET 才能将其重新启动。不幸的是,这会循环服务器上的所有内容。
为什么会发生这种情况?我该如何防止这种情况发生?当 /bin 文件夹更改时,如何让站点成功重新编译,并且不会出现 IIS 超时或其他导致此错误的情况?
谢谢。
答案1
这是 ASP.NET 和部署之间的竞争条件。当第一个应用程序文件或文件夹被触及时,将有一个 appdomain 回收,这将在部署期间快速连续发生。如果它以混乱的顺序结束,ASP.NET 可能会被抛出并保持中断状态。大多数应用程序不会发生这种情况,但有些应用程序可能会发生这种情况,尤其是部署期间负载很高的大型网站。
解决方案是在一切完成后“修改”您的 web.config 文件。这将导致仅针对您的站点进行 appdomain 回收,而不需要重置整个服务器。通过修改,只需在部署完成后再次上传 web.config 即可。
另一个选择是在部署期间使用 App_Offline.htm。
以下是我在 AppDomains 和本地化回收上发布的几个视频博客,您可能会觉得有用:
- AppDomain - 它们是什么以及为什么它们很重要
- IIS 重叠应用程序池(讨论 w3wp.exe 工作进程的完整回收,这是执行完整 iisreset 之前的另一种选择)
答案2
您是否注册了 dll?Regsvr32 和 DLL 路径。如果是 32 位,则需要使用 syswow64 文件夹中的 regsvr32。您可以做的另一件事是在 IIS 中启用失败请求跟踪,以准确找出问题所在。希望这能有所帮助