当新DLL复制到BIN目录时,ASP.net C#需要重新启动IIS

我们收到一个问题,每次我们将一个dll复制到bin目录时,我们在网站上的主域都会停止运行,恢复它的唯一方法就是重新启动“WWW Publishing Service”。

我们运行一个网站,其中包含许多运行在单个服务器上的IIS应用程序,其中每个应用程序都配置为运行不同的应用程序池。

我们有一个庞大的代码库,在整个网站上包含超过280个aspx页面。 我们的主域包含大约100个aspx页面,而子域包含15或20个。

当我们进行构建时,我们正在生成一堆dll,我们手动将其复制到生产服务器bin目录中。 一旦我们这样做,IIS显然会启动回收编译每个aspx页面和代码隐藏的回收。 在这一点上,该网站基本上停止了(有时它需要重新启动 – 通过重新启动Web发布服务 – 再次唤醒它)。

奇怪的是,这只发生在我们部署到主域IIS应用程序时,即www。 如果我们以相同的方式将bin文件部署到子域,它几乎立即起作用。

即使我做了iisreset.exe,这似乎也无法解决问题。

几个问题:

  1. 无论如何加速当前进程以便我们不必重启服务器?
  2. 是否会有任何明显的代码更改或更新,这将导致需要重新启动服务(有时我们运行iisreset但这似乎并没有恢复生命)?

一些规格:

  • 代码编写于: C#
  • .net框架: 2.0
  • 服务器: Windows Web Server 2008
  • iis版本: IIS7
  • 数据库: MSSQL 2008 Standard

任何援助将不胜感激。 提前致谢。

当您将app_offline.htm文件放在主域的wwwroot中时,IIS站点将脱机。 这是Scott Gu描述的IIS的默认行为。 执行此操作时,可以安全地覆盖所有dll。 当您删除app_offline.htm文件时,您的应用程序将在下次请求时启动。

在这里和这里阅读有关app_offline.htm更多信息。

基本上,如果将具有此名称的文件放在Web应用程序目录的根目录中,ASP.NET 2.0将关闭应用程序,从服务器卸载应用程序域,并停止处理该应用程序的任何新传入请求。 然后,ASP.NET还将通过发送回app_offline.htm文件的内容来响应应用程序中对动态页面的所有请求(例如:您可能希望有“正在构建的站点”或“关闭以进行维护”消息) 。

这提供了一种方便的方法来在您进行大量更改或复制大量新页面function时关闭应用程序(并且您希望避免在内容更新过程中人们遇到并激活您的站点的烦人问题)。 它也可以是立即解锁和卸载其.mdf或.mdb数据文件驻留在/ app_data目录中的SQL Express或Access数据库的有用方法。

删除app_offline.htm文件后,下一个进入应用程序的请求将导致ASP.NET再次加载应用程序和app-domain,并且生活将继续正常进行。

据我所知,当你向bin文件夹添加一个dll时,没有必要做iisreset。 应该从bin中自动加载dll。

将全新的dll添加到全局程序集缓存时,应该执行iisreset。

你可以在复制dll然后重新启动它时在IIS中停止该网站吗? 因为它不会停止托管在同一IIS中的其他网站。