IIS7:AppDomain应该什么时候不回收?

时间:2010-03-02 14:22:50

标签: asp.net web-applications iis-7 windows-server-2008 appdomain

基于我们网站上的一些奇怪事件,你得到了一个奇怪的问题。我们的ASP.Net解决方案中有四个.DLL (即/ bin文件夹中的托管代码)。这个早晨我们更新了所有这四个,该网站已经过测试并且工作正常。

这个下午我上传了一个新版本的一个的DLL,它让整个网站失败了,令我们感到沮丧。我很快换掉了旧版本的新版本,在我上传DLL之前将网站重新置于状态,但该网站仍处于停机状态。我们被迫重新启动整个服务器,但仍然没有任何乐趣:就我们而言,该网站已经恢复到与我上传任何内容之前的状态完全相同,但它仍然无效。

因此,经过一些调查后,我们发现上传的早晨中的一个DLL中存在错误(即与我下午上传的DLL无关) 。

我们似乎发现,由于一些奇怪的原因,当我们在早上上传我们的DLL时,AppDomain没有正确回收。对网站所做的一些更改已经生效,但至少有一个DLL仍然被缓存,而不是更新。

当我在当天下午晚些时候上传了一个DLL时,它导致了一个AppDomain回收,其中包含了今天早上上传的bug。

有没有其他人有问题AppDomain不回收的时候应该?或者可能有另一种解释,它可能是什么?每当对bin /文件夹中的任何文件进行更改时,应该回收AFAIK AppDomain ...如果是这样,它是如何意外地缓存旧版本的文件而不是正确回收的?

这是 Scott Forsyth 谈论AppDomain回收:http://weblogs.asp.net/owscott/archive/2006/02/21/ASP.NET-v2.0-2D00-AppDomain-recycles_2C00_-more-common-than-before.aspx

1 个答案:

答案 0 :(得分:1)

有时,如果网站处于负载状态,该网站将不会进行回收,因为IIS认为最好继续运行,而不是让每个人都关闭网站重新启动所需的时间。

在大多数地方,我最好的做法是在更新站点文件后始终发出IISRESET。这可确保部署后所有内容都得到回收。