我认为我很熟悉ASP.NET,直到几个小时前。我知道IIS可以回收应用程序域,原因有多种,包括更改web.config / bin / App_GlobalResources等文件/目录,或者按计划或特定事件(如达到特定的内存阈值)。 / p>
我非常确定我的代码没有达到任何这些条件。基本上,常规的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应用程序本身写入应用程序的任何子目录的应用程序域?
答案 0 :(得分:2)
有一个名为FileChangesMonitor的东西,它有一个要监视的文件夹列表,如果其中任何一个发生变化,将触发应用程序回收。似乎只要资源(一个html页面,一个图像,或者在你的情况下,一个pdf)通过HTTP请求提供服务,它所在的文件夹就会成为一个ASP.NET文件夹,即被添加到列出并监控变化。资源是位于应用程序根目录内部还是外部并不重要。我在文件夹删除时遇到了这个问题,但我想重命名会发生同样的事情。这令人沮丧,因为它使得提供易失性静态资源变得非常困难。