IIS 6+ASP.NET - создано много временных файлов
У меня есть ASP.NET + некоторые веб-службы.NET, работающие на IIS 6 (сервер win 2003). Проблема в том, что IIS генерирует много (!) Файлов в каталоге "c:\WINDOWS\Temp". много файлов - это тысячи файлов, размер которых превышает 3G.
Файлы создаются с помощью этой команды: C:\WINDOWS\SysWOW64\inetsrv> "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe" /t:library /utf8output /R:"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ Временные файлы ASP.NET \vfagt\113819dd\db0d5802\assembly\dl3\fedc6ef1\006e24d8_3bc9ca01\VfAgentWService.DLL" /R:"C:\WINDOWS\ Assembly\GAC \ GAC \ GAC ".Web.Services\2.0.0.0__b03f5f7f11d50a3a\System.Web.Services.dll" /R:"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll" /R:"C:\WINDOWS\assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089\System.Xml.dll" /R:"C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll" /out:"C:\WINDOWS\TEMP\9i_i2bmg.dll" /debug- /optimize+ /nostdlib /D:_DYNAMIC_XMLSERIALIZER_COMPILATION "C:\WINDOWS\TEMP\9i_i2bmg.0.cs"
Файлы в каталоге temp являются парами *.out & *.err, где файл *.err имеет нулевой размер, а файл *.out содержит выходные сообщения компиляции.
Что заставляет IIS генерировать так много файлов?
Как я могу предотвратить это?
ОБНОВИТЬ:
Проблема заключается в том, что описанная выше команда (csc.exe) выполняется много (много) раз, в результате чего.out &.err генерируется так много раз, что он занимает место на диске.
Итак, мой вопрос: что заставляет эту команду запускаться так много раз? (У меня не так много файлов.aspx и.asmx в моем веб-приложении).
Спасибо мо
3 ответа
Вы не можете предотвратить это. IIS + ASP.NET динамически компилирует файлы, такие как.aspx, .asmx, .ascx, .ashx, .asax и другие. Это все файлы шаблонов, которые в конечном итоге преобразуются в исходный код на выбранном языке - C#, VB.NET или что-то еще, на чем вы хотите писать свои страницы ASPX.
Модель для ASP.NET, когда получен запрос на страницу, выглядит следующим образом:
- проверьте, доступна ли сборка для запрашиваемой страницы и актуальна ли она. если это так, передайте запрос на страницу.
- если нет, создайте исходный код из задействованных шаблонов (aspx, ascx и т. д.). Поместите сгенерированный исходный код в каталог ASP.NET Temp.
- компилировать исходные файлы в сборки с динамическими именами, а также помещенные во временный каталог. Если вы используете C#, это означает, что он запускает csc.exe, как вы видели.
- загрузить вновь скомпилированную сборку.
- передать запрос этой сборке (например, шаг 1)
Файлы.out и.err - это просто stdout и stderr из вызова csc.exe. Они вряд ли будут занимать 3 ГБ пространства файловой системы.
Но ASPNET также сохраняет временные копии всех сборок, на которые ссылаются любые страницы или элементы управления (и т. Д.), В этом дереве каталогов. Если вы ссылаетесь на System.Xml.dll на трех отдельных страницах ASPX, то существует копия файлов System.Xml.dll в трех различных временных каталогах в дереве временных папок ASPNET. Эти копии могут накапливаться, и я не удивлюсь, если узнаю, что большая часть ваших 3 ГБ находится в копиях DLL.
Узнайте больше об этом на http://www.codeproject.com/KB/aspnet/ASPXFILES.aspx
Вы можете удалить любые файлы в C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
каталог. Это невозможно, пока IIS и ASP.NET активны. Если у вас есть период обслуживания, вы можете удалить их, когда сайт не работает. Если это машина разработчика, просто остановите IIS (net stop w3svc
) удалите все подкаталоги в этой папке, затем перезапустите IIS (net start w3svc
).
Связанные с:
- Устранение временных файлов ASP.Net
- Для чего нужна папка "Временные файлы ASP.NET"?
Ищите это в вашем web.config:
</system.diagnostics>
<switches>
<add name="XmlSerialization.Compilation" value="1" />
</switches>
</system.diagnostics>
значение = 1 означает сохранение временных файлов. Вы можете предварительно скомпилировать файлы сериализации, чтобы компиляция вообще не происходила.
Не уверен, если это поможет, но здесь у вас есть несколько ссылок, которые описывают похожую ситуацию
http://geekswithblogs.net/akraus1/archive/2009/09/14/134820.aspx