在某些情况下,将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/