我们遇到一个问题,即每次我们将dll复制到bin目录时,我们在网站上的主域都会停止运行,恢复它的唯一方法就是重新启动“WWW Publishing Service”。 / p>
我们运行的网站包含许多运行在单个服务器上的IIS应用程序,其中每个应用程序都配置为运行不同的应用程序池。
我们有一个庞大的代码库,在整个网站上包含超过280个aspx页面。我们的主域包含大约100个aspx页面,而子域包含15或20个。
当我们进行构建时,我们正在生成一堆dll,我们手动将其复制到生产服务器bin目录中。一旦我们这样做,IIS显然会启动回收编译每个aspx页面和代码隐藏的回收。此时,该站点基本上停止了(有时需要重新启动 - 通过重新启动Web发布服务 - 再次唤醒它)。
好奇的是,这只发生在我们部署到主域IIS应用程序时,即www。如果我们以相同的方式将bin文件部署到子域,它几乎可以立即工作。即使我使用了iisreset.exe,这似乎也无法解决问题。
几个问题:
一些规格:
任何帮助将不胜感激。提前致谢。
答案 0 :(得分:12)
当您将app_offline.htm
文件放在主域的wwwroot中时,IIS站点将脱机。这是Scott Gu描述的IIS的默认行为。执行此操作时,可以安全地覆盖所有dll。当您删除app_offline.htm
文件时,您的应用程序将在下次请求时启动。
详细了解app_offline.htm
here和here。
基本上,如果将具有此名称的文件放在Web应用程序目录的根目录中,ASP.NET 2.0将关闭应用程序,从服务器卸载应用程序域,并停止处理任何新的传入请求应用。然后,ASP.NET还将通过发送回app_offline.htm文件的内容来响应应用程序中对动态页面的所有请求(例如:您可能希望有“正在构建的站点”或“关闭以进行维护”消息)
这提供了一种方便的方法,可以在您进行大量更改或复制大量新页面功能时关闭应用程序(并且您希望避免在内容更新过程中人们遇到并激活您的网站的烦人问题)。它也可以是立即解锁和卸载其.mdf或.mdb数据文件驻留在/ app_data目录中的SQL Express或Access数据库的有用方法。
删除app_offline.htm文件后,下一个进入应用程序的请求将导致ASP.NET再次加载应用程序和app-domain,生活将继续正常进行。
答案 1 :(得分:3)
据我所知,在bin文件夹中添加dll时没有必要进行iisreset。应该从垃圾箱自动加载dll。
将全新的dll添加到全局程序集缓存时,应该执行iisreset。
答案 2 :(得分:0)
在复制dll然后重新启动时,你可以在IIS中停止该网站吗?因为它不会停止托管在同一个IIS中的其他网站。