在某些情况下,将app_offline.htm
放在根目录中是正确的:您进行了一些更新,更新时会显示消息,就是这样。正如微软所说,这个想法是在调用任何之前,IIS首先检查app_offline.htm是否存在,如果是,它会取消所有内容并显示它。
所以非常好,但在许多情况下它不起作用:
可能存在更多失败的情景。我的观点是:对于任何严肃的更新工作,app_offline.htm都不合适。我有时会在IIS中创建一个重定向到另一个站点,但是另一个站点可能并不总是可用,并且可能会使用户感到困惑。
理想情况下,我希望将当前位置保留在最终用户的网址位置栏中,显示消息,并让网页每分钟自动刷新以查看网站是否已恢复,以便用户当网站回来时他继续离开。虽然在静态页面上技术上很容易,但是在抛出错误的那一刻,它会因上述原因而失败。
答案 0 :(得分:10)
没有人提到web.config和重新编译,所以在这里。我遇到过这个问题。我不同意那个说“不打算使用prod”的人:VS 2010在部署时使用了app_offline,因此它被编入代码中。
解决方法(归功于Kurt Schindler,blog post here)。
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或其他部署工具来执行此操作。
答案 1 :(得分:6)
我在一些非常高流量的站点上看到过的一种方法是在inetpub目录中有多个文件夹。类似的东西:
inetpub
\ site2011-02-03
\ site2011-03-14
“site2011-02-03”是现有网站,“site2011-03-14”是今天推送的网站。完成对新文件夹的推送后,将IIS站点更改为指向新目录。如果失败,您将IIS更改为旧版本。
坦率地说,我在使用app_offline.htm时从未遇到过您所说的错误。它总是能够正常运行以降低网站;即使是直接链接到页面。我猜你可能还有别的东西在这里。我已经使用了IIS 7和7.5(2008 R2)。
更新
刚查看我们的配置。我们将app_offline.htm映射为我们服务器上的顶级默认文档。这可能是一个减轻因素。
答案 2 :(得分:3)
我喜欢在您的实际网络应用离线时使用“离线”网络应用的想法。您可以在Web目录上设置符号链接以指向相应的应用程序。
您的设置可能如下所示:
Web_Dir(这是目录 IIS服务www.yourdomain.com) 的WebApp
- ActualWebApp
- OfflineWebApp
场景:您的应用已在线
Web_Dir - &gt; ActualWebApp(Web_Dir链接到ActualWebApp)
场景:您的应用处于离线状态
Web_Dir - &gt; OfflineWebApp(Web_Dir链接到OfflineWebApp)
基本上,您最终会得到两个不同的Web应用程序:实际的Web应用程序和“离线”Web应用程序。这使您可以灵活地将用户重定向到另一个站点,但保持您的域的外观 - 因为它是!
实际的网络应用程序是真正的网络应用程序。这是您要更改的内容以及包含实际内容的内容。
“离线”网络应用内容非常少。也许它只包含您在问题中提到的静态页面。也许它有一些路由来处理任何页面请求,显示离线消息,并每分钟重新加载。
您的IIS网络目录实际上是指向这两个网络应用之一的链接。通常,它会链接到您的实际网络应用程序。当您准备开始(重新)部署Web应用程序时,您将Web目录更改为指向“离线”应用程序。部署完成后,您将更改链接,以便再次指向真实的Web应用程序。
答案 3 :(得分:0)
我认为app_offline.htm不是intended用于生产用途。
我的解决方案是创建一个单独的Web应用程序,其中包含一个捕获所有请求的模块,并将它们重定向到静态.htm页面,其中包含所请求站点的查询字符串和一些javascript以重试原始请求。
当您准备好进行维护时,请设置虚拟应用程序以处理对您域的所有请求。在进行维护时使用不同的端口或临时域,以便进行测试。完成后,将其切换回来,决定等待的用户应该重定向到最初请求的页面。
之前我只完成了一半(切换应用程序端口以打开更新后的网站),因此可能还有其他步骤可以获得所需的用户体验。
希望这有帮助。
答案 4 :(得分:0)
在我们的案例中,app_offline.htm在我们注释掉web.config页面的部分之前无法正常工作。如果取消注释,它将重定向到我们定义的错误页面而不是预期的app_offline.htm。
答案 5 :(得分:0)
旧帖子,我知道,但我还没有看到这个: