IIS 6 + ASP.NET - создано много временных файлов - PullRequest
2 голосов
/ 25 марта 2010

У меня есть 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_MSIL\S.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 генерировать так много файлов?

Как я могу предотвратить это?

UPDATE:

Проблема в том, что описанная выше команда (csc.exe) выполняется много (много) раз, в результате чего файл .out & .err генерируется столько раз, что он занимает место на диске.

Итак, мой вопрос: что вызывает многократное выполнение этой команды? (У меня не так много файлов .aspx и .asmx в моем веб-приложении).

Спасибо, Моу

Ответы [ 3 ]

2 голосов
/ 25 марта 2010

Вы не можете предотвратить это. 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
- Для чего нужна папка «Temporary ASP.NET Files»?

1 голос
/ 31 января 2014

Ищите это в вашем web.config:

  </system.diagnostics>
    <switches>
      <add name="XmlSerialization.Compilation" value="1" />
    </switches>
  </system.diagnostics>

значение = 1 означает сохранение временных файлов. Вы можете предварительно скомпилировать файлы сериализации, чтобы компиляция вообще не происходила.

0 голосов
/ 25 марта 2010

Не уверен, если это поможет, но здесь у вас есть несколько ссылок, которые описывают похожую ситуацию

http://geekswithblogs.net/akraus1/archive/2009/09/14/134820.aspx

http://social.msdn.microsoft.com/Forums/en-US/netfxremoting/thread/fddb5072-f84b-432a-945a-607e183e1da3

...