1

我以为我很了解 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 应用程序本身写入应用程序的任何子目录的应用程序域?

4

1 回答 1

2

有一个名为 FileChangesMonitor 的东西,它有一个要查看的文件夹列表,如果其中任何一个发生变化,它将触发应用程序回收。似乎只要通过 HTTP 请求提供资源(html 页面、图像或在您的情况下为 pdf),它所在的文件夹就会成为 ASP.NET 文件夹,即被添加到列出并监控变化。资源位于应用程序根目录内部还是外部都无关紧要。我在删除文件夹时遇到了这个问题,但我猜重命名也会发生同样的事情。这是令人沮丧的,因为它使提供不稳定的静态资源变得非常困难。

于 2014-02-04T22:23:02.483 回答