在某些情况下,将app_offline.htm放在根目录中是正确的:您进行了一些更新,消息在更新时出现,仅此而已。就像Microsoft所说的那样,想法是在调用任何东西之前,IIS首先检查app_offline.htm是否存在,如果存在,它将取消所有内容并显示它。

所以就这么好,但是在许多情况下它是行不通的:


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


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

理想情况下,我想将当前位置保留在最终用户的url位置栏中,显示消息,并让页面每分钟自动刷新一次,以查看该站点是否返回,以便用户继续在他网站返回时的左侧。尽管从技术上来说,使用静态页面足够容易,但是由于上述原因,在抛出错误的那一刻它将失败。

最佳答案

没有人提到过web.config和重新编译,所以就在这里。我遇到了这个问题。我不同意说它“不适合用于产品用途”的人:VS 2010部署时使用app_offline,因此将其嵌入代码中。

解决方法(贷记给Kurt Schindler,blog post here)。


将app_offline.htm复制到您的网站
制作一个看起来像这样的web.config(请参见下面的编号块)
将该web.config复制到您的远程目录
将除您真正的web.config之外的所有站点文件复制到远程目录
将真实的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>


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

关于asp.net - 对于经常损坏的app_offline.htm hack,建议的替代方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5301847/

10-16 18:11