1

在我正在使用的网站上,我们有两类他们可以要求的更改。一方面,他们有我必须重建和重新部署的东西。他们将这些视为“停机时间”更改,因为我们会显示一个漂亮的小闪屏,并且在我们恢复时会彻底测试该站点。

另一方面,他们要求我们进行一些文本更改、打开和关闭功能等,我们已将其隔离到 web.config。我们提供在部署窗口内部或外部执行这些操作 - 我们只需编辑文件,检查更改是否正确,然后重新开始工作。

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

但是持续多久?我并不是要您对停机时间间隔的客户舒适程度进行分类,但这是一个普遍的观点吗?还是我们不应该担心 web.config 编辑会伴随一两秒的应用程序停机时间?

4

4 回答 4

5

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

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

您可以将 .config 文件的一部分移植到另一个文件,该文件不会回收应用程序池。

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

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

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

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>   
<add key="SOMEKEY" value="MYVALUE"/>
</appSettings>
于 2009-12-28T18:04:27.067 回答
3

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

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

于 2009-12-28T17:52:05.127 回答
3

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

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

于 2009-12-28T17:54:10.423 回答
2

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

AppPool 回收的其他副作用与 iisreset 相同:如果我没记错的话,它会刷新 InProc 会话缓存,并执行 Application_Start 事件。

因此,即使它相对无害,我仍然会将其视为停机时间。

于 2009-12-28T18:09:03.517 回答