代码之家  ›  专栏  ›  技术社区  ›  dnord

编辑web.config-导致停机的原因?

  •  1
  • dnord  · 技术社区  · 15 年前

    在我正在工作的一个网站上,我们有两类可以要求的更改。一方面,他们有我必须重建和重新部署的东西。他们将这些视为“停机时间”的变化,因为我们会显示一个很好的小屏幕,当我们返回时会彻底测试站点。

    另一方面,他们要求我们做一些文本更改,打开和关闭功能等等,这些都是我们孤立于web.config的。我们提供在部署窗口内部或外部执行这些操作-我们只需编辑文件,检查更改是否正确,然后返回工作。

    但是客户端的一个聪明人指出,编辑web.config会回收应用程序池,这就是停机时间。我从来没有注意到,但我想这是对的——当应用程序池不可用时,应用程序会“关闭”。

    但要多久?我不是要你根据客户对停机时间间隔的舒适程度进行分类,但这是一个常见的观点吗?或者,我们应该不担心web.config编辑会伴随着一两次应用程序停机?

    4 回复  |  直到 14 年前
        1
  •  3
  •   Greg    15 年前

    IIS通常会自行回收应用程序池,如果这些回收不会引起您的关注,那么这一次也不应该。

    用户不应该收到任何类型的“服务不可用”错误,afaik。

        2
  •  5
  •   Clarence Klopfstein    15 年前

    到目前为止所说的都是正确的。

    但是,有一种方法可以避免这种停机时间,只要您正在提取的值不被缓存。

    您可以将.config文件的一部分移植到另一个文件,这不会重新设置应用程序池的样式。

    在web.config文件中,它看起来像这样:

    <appSettings file="moresettings.config"></appSettings>
    

    然后您的外部文件将如下所示:

    <?xml version="1.0" encoding="utf-8" ?>
    <appSettings>   
    <add key="SOMEKEY" value="MYVALUE"/>
    </appSettings>
    
        3
  •  3
  •   Gabriel McAdams    15 年前

    如果您关心停机时间,并且这种情况经常发生,那么我会考虑将这些设置移到数据库中。

    也就是说,在您的情况下,停机时间将是最小的。当您保存web.config文件时,应用程序池会被回收,我们说的是毫秒。

        4
  •  2
  •   Michael Stum    15 年前

    如前所述,IIS确实在回收应用程序池。不过,这并不像执行完整的iisreset那么糟糕-用户不应该得到“服务不可用”。错误是,Web服务器仍然在线并提供请求服务-它只需要等待AppPool重新启动,这意味着此时用户访问的响应时间非常长。当然,如果你有一个公共网站,并且把访问者拒之门外,这可能是一个问题。

    AppPool回收的另一个副作用与iisreset相同:如果我没有弄错,它会刷新Inproc会话缓存,并执行应用程序启动事件。

    所以即使它相对无害,我还是会把它当作停机时间。