2013-11-12 9 views
1

Я думал, что хорошо знаю ASP.NET, пока пару часов назад. Я знаю, что IIS может перерабатывать домен приложения из-за множества причин, включая изменения в файл/каталоги web.config/bin/App_GlobalResources и т. Д. Или иначе по расписанию или по конкретным событиям (например, при достижении определенной памяти).Меняет ли какой-либо подкаталог или файл в приложении ASP.NET пул приложений

Я был очень уверен, что мой код НЕ попадал ни в одно из этих условий. Обычно обычный HTTP-запрос запускает небольшую задачу в фоновом потоке (ThreadPool.QueueUserWorkItem), который должен привести к написанию pdf-файла внутри подкаталога моего приложения ASP.NET.

В этом подкаталоге не было ничего, что могло бы квалифицировать его для того, чтобы вызвать повторное использование приложения. Это было что-то вроде:

Моего сайта \ НазваниеКомпания \ Mailer \ UploadFiles

Пожалуйста, не предлагают причины, как конфигурация или изменения каталога бен, код не меняется ничего в папках ASP.NET. Его запись в файл PDF внутри каталога nonASP.NET.

Я использовал событие 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?

ответ

2

Существует вещь, называемая FileChangesMonitor, которая имеет список папок для просмотра и запускает приложение, если какое-либо из них изменится. Кажется, что как только ресурс (html-страница, изображение или, в вашем случае, pdf) подается через HTTP-запрос, папка, в которой он находится, становится папкой ASP.NET, то есть добавляется к список и отслеживать изменения. И неважно, находятся ли ресурсы внутри или вне корня приложения. Я столкнулся с этой проблемой с удалением папки, но я думаю, что то же самое произойдет с переименованиями. Это разочаровывает, потому что это очень затрудняет работу волатильных статических ресурсов.

+0

Хммм ... это хорошее предложение, я рассмотрю это. Если это действительно так, я думаю, что есть довольно простой способ обхода, чтобы не писать файл с использованием HttpResponse.WriteFile, а вместо этого читать файл вручную с помощью потока и выводить с использованием HttpResponse.WriteBytes. То же самое можно легко инкапсулировать в метод расширения HttpResponse. –

 Смежные вопросы

  • Нет связанных вопросов^_^