Пул приложений IIS падает при создании временных файлов в моем виртуальном каталоге - PullRequest
0 голосов
/ 25 августа 2010

У меня есть статический контент, такой как html, css javascript, хранящийся в БД. когда пользователь запрашивает их, я создаю временный файл в виртуальном каталоге и возвращаю URL.

Мое веб-приложение размещено на сервере IIS. В некоторых системах при создании файла происходит сбой и перезапуск моего пула приложений IIS. Если я отключаю мониторинг файлов, хотя проблема решена, но у меня нет такой роскоши, когда я отправляюсь на стороне клиента.

Есть ли способ избежать падения пула приложений во время создания файла?

Если нет, то я могу использовать статический контент, такой как HTML, CSS, изображения, XML и JS, не создавая временные файлы. Мне нужен обобщенный способ обработки всех этих типов данных.

1 Ответ

1 голос
/ 31 августа 2010

Найден фрагмент кода, который выполняется в событии запуска приложения и отключает уведомление об изменении файла в корневой веб-папке

System.Reflection.PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);

object o = p.GetValue(null, null);

System.Reflection.FieldInfo f = o.GetType().GetField("_dirMonSubdirs", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.IgnoreCase);

object monitor = f.GetValue(o); //Returns NULL

System.Reflection.MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); m.Invoke(monitor, new object[] { });

Есть другой фрагмент с небольшим изменением

var theRuntime = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
var fcmField = typeof(HttpRuntime).GetField("_fcm", BindingFlags.NonPublic | BindingFlags.Instance);

var fcm = fcmField.GetValue(theRuntime);
fcmField.FieldType.GetMethod("Stop", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(fcm, null);

В обоих случаях сценарию требуется права администратора для успешной работы (попытка использования гостевой учетной записи и сбой)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...