当我编辑web.config文件时会发生什么?

88

我需要在现有的Sharepoint环境中编辑web.config文件,但我不确定如果这样做会发生什么(我想输出自定义错误消息)。

这会导致IIS6工作进程重新启动吗?

活跃用户会因此丢失他们的会话状态吗?

还是我可以安全地编辑该文件?


您可以定义会话以放置在远程计算机上,这样应用程序重置就不会导致会话丢失。 - Kamarey
5个回答

83

应用程序池将重新启动,会话状态将丢失。想象一下每个 ASP.NET 应用程序(在 IIS 中定义)就像桌面上的一个程序。保存 web.config 的操作类似于关闭该程序然后重新打开它。


12
在IIS7和IIS8中,这是默认行为,但你可以通过应用程序池 >高级选项>回收>禁用配置更改回收 = true进行更改,这对于生产环境非常有帮助,因此管理员可以进行更改,而无需立即生效,直到下次回收。特别针对Sharepoint,有一种方式可以安排更改以便在特定时间应用它们,我相信。 - nothingisnecessary
4
但是,将“应用程序池 > 高级选项 > 回收 > 禁用回收”设置为“是”,本身会导致应用程序池的重启吗?这是无限循环吗? - D'Arcy Rittich
1
嗨@DanGoldstein。您提到了“类似的东西”来关闭程序并重新打开。那静态状态呢?通过web.config编辑,静态状态是否保证被清除?原因是我在静态变量中缓存了一些web.config内容。 - Dirk Boer
老实说,我对这个问题的信息不再是一个好的来源了。当我回答时,我全职使用IIS和ASP.Net。现在我只是一个业余软件开发者。 - Dan Goldstein
如果应用程序池下有许多应用程序,仅编辑一个网站的web.config文件和重新启动应用程序池似乎不太适合。 - Raghav
显示剩余5条评论

31

10

如果会话状态配置为 out-of-process(数据库或服务),则重新启动应用程序池 不会 丢失任何会话状态。这对于Sharepoint和普通的ASP.Net都是适用的。


3

当您编辑web.config文件时,它将重新启动该Web应用程序的AppDomain(而不是AppPool),并清除所有占用的资源和内存。因此,运行在该App Pool下的其他Web应用程序将不会受到影响。同时,它还会清除会话(in-proc)和内存缓存。


1

正如一些人已经提到的那样:IIS 中站点的应用程序池将重新启动(这通常需要几秒钟)。因此,下一个页面请求将会变慢(因为不再缓存任何内容)。此外,用户的会话状态将会丢失;但在 WSS 中,默认情况下不使用会话状态,在 MOSS 中,它被 InfoPath 表单服务使用。因此,您可能不会因为丢失会话状态而遇到大问题。

另一方面,为了克服这些问题:通常做法是创建一个 SharePoint 解决方案(WSP),该解决方案部署并启动定时作业以通过代码(使用对象模型的 SPWebConfigModification 类)对 web.config 进行更改。好处是您可以安排执行更改的时间,这样您的用户就不会注意到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接