在相当一些情况下,将app_offline.htm放在根目录中是正确的:你做一些更新,消息在更新时出现,就是这样.这个想法是,正如微软所说,在任何东西被调用之前,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或其他部署工具来执行此操作.