什么是经常损坏的app_offline.htm hack的建议替代方案?

Abe*_*bel 14 asp.net app-offline.htm

在某种情况下,放在app_offline.htm根目录中是正确的:您进行了一些更新,更新时会显示消息,就是这样.正如微软所说,这个想法是,在调用任何东西之前,IIS首先检查app_offline.htm是否存在,如果是,它会取消所有内容并显示它.

所以非常好,但在许多情况下它不起作用:

  • 当您在ASPX页面中有编译错误并且用户直接链接到它时
  • 当你有冲突的程序集
  • 当您在web.config中有解析错误时
  • 在删除/上传整个网站的过程中.
  • 仍然会显示指向静态HTML页面的直接链接
  • 在显示消息之前抛出文件未找到,拒绝访问

可能存在更多失败的情景.我的观点是:对于任何严肃的更新工作,app_offline.htm都不合适.我有时会在IIS中创建一个重定向到另一个站点,但是另一个站点可能并不总是可用,并且可能会使用户感到困惑.

理想情况下,我希望将当前位置保留在最终用户的URL位置栏中,显示消息,并让页面每分钟自动刷新以查看该站点是否返回,以便用户继续当网站回来时的左边.虽然在技术上使用静态页面很容易,但是在抛出错误的那一刻,它会因上述原因而失败.

jco*_*lum 10

没有人提到web.config和重新编译,所以在这里.我遇到过这个问题.我不同意那个说"不打算使用prod"的人:VS 2010在部署时使用了app_offline,因此它被编入代码中.

解决方法(归功于Kurt Schindler,博客文章).

  1. 将app_offline.htm复制到您的网站
  2. 制作一个看起来像这样的web.config(见下面编号的块)
  3. 将该web.config复制到您的远程目录
  4. 将除真正的web.config之外的所有站点文件复制到远程目录
  5. 将真正的web.config复制到远程目录(应该启动重新编译)

web.config中:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration>
  <system.web>
    <httpRuntime waitChangeNotification="300"
       maxWaitChangeNotification="300"/>
  </system.web>
  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true"  />
  </system.webServer> 
</configuration>
Run Code Online (Sandbox Code Playgroud)

这样做的结果是,如果您关心在部署期间没有看到YSOD的最终用户,则无法直接使用VS 2010应用程序部署.因此,您需要使用Nant或其他部署工具来执行此操作.


Not*_*tMe 6

我在一些非常高流量的网站上看到这种方法的一种方法是在inetpub目录中有多个文件夹.就像是:

inetpub
     \ site2011-02-03 
     \ site2011-03-14
Run Code Online (Sandbox Code Playgroud)

其中"site2011-02-03"是现有网站,"site2011-03-14"是今天推送的网站.完成对新文件夹的推送后,将IIS站点更改为指向新目录.如果失败,您将IIS更改为旧版本.

坦率地说,我在使用app_offline.htm时从未遇到过您所说的错误.它总是能够正常运行以降低网站; 即使是直接链接到页面.我猜你可能还有别的东西在这里.我已经使用了IIS 7和7.5(2008 R2).

更新
刚查看我们的配置.我们将app_offline.htm映射为我们服务器上的顶级默认文档.这可能是一个缓解因素.