asp.net - 在 ASP.NET 中无缝部署(IIS 在新工作进程准备好之前杀死工作进程)

标签 asp.net iis deployment worker-process

我正在尝试将 .NET Web 应用程序部署到 IIS (7.5),而不会给用户带来任何麻烦。我已经确定 禁用重叠回收是错误的 但我每次仍然遇到同样的问题。

每次我为站点上传新的二进制文件时,IIS 都会在工作进程启动新进程之前终止它。因此,每次我上传新的二进制文件时,用户都会收到此错误消息:

Server Error in '/' Application. Could not load file or assembly 'MyApplicationWeb' or one of its dependencies. The process cannot access the file because it is being used by another process. (Exception from HRESULT: 0x80070020)



我不知道如何无缝地做到这一点。现在我只是上传二进制文件;但是当上传发生(或本地复制)时,它会给出上面引用的行为。我也尝试使用网络花园,但结果相同。

我不是在寻找什么:
  • 如何使用外部负载平衡器解决它(这是一个功能性的解决方案,但对于少数服务器来说这是一个糟糕的解决方案,如果只有一台服务器,它根本无法工作)
  • 如何在自定义错误页面中通过刷新创建一个 hack-around(因为它有一些明显的问题,但更重要的是,它根本不适用于 Web 服务/ajax)。

  • 鉴于 http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/24e3c22e-79a9-4f07-a407-dbd0e7f35432.mspx?mfr=true,我真的认为这应该是可行的

    更新:
    在上面的文章中,他们说:

    However, because the shutdown timeout value of a shutdown or startup is configurable, the worker process can be terminated while it is still serving requests if it does not finish servicing existing requests within the time limit.



    我不知道在哪里可以找到这个值,也不知道它是什么默认值。如果它少于几秒钟,它可能会解释我的结果。

    附:我将它发布在 SO 而不是 SF/Webmasters 等上,因为我认为这种知识在不积极参与开发的人中可能很少,我希望这没问题。

    最佳答案

    部署 ASP.Net 应用程序时,我在服务器上创建一个新文件夹并更改 IIS 中网站的主目录。这提供了零停机部署和在出现不可预见的问题时的快速回滚位置。在 future 的更新中,我废弃旧版本并重复该过程,以便始终有一个回滚位置。
    更新 - 关机时间限制
    http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add/processModel 中详细介绍了为工作人员配置关闭时间限制的详细信息。 .默认值为 1 分 30 秒。在链接页面中查找 shutdownTimeLimit 部分。
    更新 - 更多信息
    Similar question with a great answer
    其要点是,由于覆盖现有文件,复制机制对文件进行了独占锁定,并且在不使用 app_offline.htm 或上述建议的机制的情况下不可能进行无缝部署。阅读链接的答案,因为它更深入。

    关于asp.net - 在 ASP.NET 中无缝部署(IIS 在新工作进程准备好之前杀死工作进程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358020/

    相关文章:

    asp.net - 在asp.net中如何解决内存消耗超过限制?

    python - 回滚事务SQL

    asp.net - ASP 创建对象时没有此类接口(interface)支持错误

    javascript - Django:在部署时通过模板引擎呈现静态文件

    bash - 如何通过终端命令将 Web 应用程序部署到 tomcat 应用程序服务器

    html - MVC 4 : How to convert string into IView?

    asp.net - 如何让 Response.Redirect 指定 rel ="nofollow"?

    c# - 有没有办法获取div的样式属性?

    android - 为我们现有的客户部署工具到 iPhone 和 Android

    c# - 尝试将数据从 WPF 应用程序发送到任何 Web 浏览器上的网页