在我正在使用的网站上,我们有两类他们可以要求的更改。一方面,他们有一些我必须重建和重新部署的东西。他们将这些视为“停机”更改,因为我们会显示一个漂亮的小屏幕,我们会在我们重新启动时彻底测试网站。
另一方面,他们要求我们进行一些文本更改,打开和关闭功能等,我们已将其隔离到web.config。我们提供在部署窗口内部或外部执行这些操作 - 我们只需编辑文件,检查更改是否正确,然后返回工作。
但客户端的一位聪明人指出,编辑web.config会回收应用程序池,而那就是停机时间。我从来没有注意到,但我认为这是对的 - 当应用程序池不可用时,应用程序“关闭”。
但是多久了?我不是要求您通过停机间隔来分析客户的舒适程度,但这是一个共同的观点吗?或者我们不应该担心web.config编辑是否伴随着应用程序停机的第二或两次?
答案 0 :(得分:5)
但是,有一种方法可以避免这种停机时间,只要您提取的值不会被缓存。
您可以将部分.config文件移植到另一个文件中,该文件不会重新启动应用程序池。
在web.config文件中看起来像这样:
<appSettings file="moresettings.config"></appSettings>
然后您的外部文件将如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="SOMEKEY" value="MYVALUE"/>
</appSettings>
答案 1 :(得分:3)
如果您一直担心停机时间,而且这种情况会发生很多,我会考虑将这些设置移到数据库中。
那就是说,你的情况下停机时间会很短。保存web.config文件后,应用程序池将被回收,我们正在谈论毫秒。
答案 2 :(得分:3)
IIS通常会自行回收应用程序池,如果这些回收不会引起您的关注,那么这一次也不应该。
用户不应该收到任何类型的“服务不可用”错误。
答案 3 :(得分:2)
如上所述,IIS确实在回收App Pool。这并不像做一个完整的iisreset那么糟糕 - 用户不应该得到“服务不可用”。 Web服务器仍在线并提供请求时出错 - 它只需要等待AppPool重新启动,这意味着此时访问的用户的响应时间非常长。如果您有一个公共网站并且正在将访客转移,这可能是一个问题。
AppPool回收的其他副作用与iisreset相同:如果我没有弄错,它会刷新InProc会话缓存,并执行Application_Start事件。
所以即使它相对无害,我仍然会将其视为停机时间。