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

标签 asp.net app-offline.htm

在相当多的情况下,放置 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 复制到远程目录(应该开始重新编译)

  • 网络配置:
    <?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>
    

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

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

    相关文章:

    c# - 如何在 Aspx 页面上显示日期?

    asp.net - 调试:当类型标记为可序列化时如何调试 "Type is not marked as serializable"异常

    asp.net - app_offline.htm 在生产设备上抛出 HTTP 500 错误

    iis - IIS下ASP.NET Core随机重启

    asp.net - App_offline.htm、CSS、图像和 aspnet_isapi.dll

    c# - 如何在 GridView 的 RowDataBound 中使用模板字段项

    javascript - 即使首先在 js onclick 函数中返回 false,ASP.NET 按钮也始终会转到服务器

    asp.net - 带有 SQL Server 的信号器

    asp.net - 更新 dll 时使用 app_offline.htm 使应用程序脱机 更新 dll 时失败