我以为我很了解 ASP.NET,直到几个小时前。我知道 IIS 可以由于多种原因回收应用程序域,包括更改 web.config/bin/App_GlobalResources 等文件/目录,或者按计划或特定事件(如达到特定内存阈值)。
我非常确定我的代码没有达到任何这些条件。基本上,一个常规的 http 请求会在后台线程 (ThreadPool.QueueUserWorkItem) 中触发一个小任务,这会导致在我的 ASP.NET 应用程序的子目录中写入一个 pdf 文件。
这个子目录没有任何东西可以使它有资格导致应用程序回收。它是这样的:
我的网站\CompanyName\Mailer\UploadFiles
请不要建议配置或 bin 目录更改等原因,代码在 ASP.NET 文件夹中没有任何变化。它写入非 ASP.NET 目录中的 pdf 文件。
我使用 Application_End 事件来找出回收的原因(使用此处建议的反射:http ://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx )并得到了这个:
_shutDownMessage=Directory rename change notification for 'd:\Projects\MyProject\trunk\dev'.
dev dir change or directory rename
HostingEnvironment initiated shutdown
HostingEnvironment caused shutdown
Directory rename change notification for 'd:\Projects\MyProject\trunk\dev'.
dev dir change or directory rename
我几乎被难住了。我很确定我已经在其他项目上编写了代码,这些代码写在应用程序的子目录下而不会导致应用程序回收。但在这种情况下不是。
我错过了什么吗?是否期望 IIS 回收试图从 ASP.NET 应用程序本身写入应用程序的任何子目录的应用程序域?