Как закрыть файл во время перезапуска пула приложений - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть приложение, работающее в собственном пуле приложений, которое часто записывает в текстовый файл журнала. Когда срабатывает 29-часовой фиксированный перезапуск, я обычно сталкиваюсь с проблемами, потому что новый процесс запускается, пока старый процесс все еще там. Это приводит к тому, что «невозможно открыть файл, потому что он используется другим процессом».

Сначала я просто попытался установить Disable Overlapped Cycle на True, но это отключило мою службу на 90 или более секунд, что не очень хорошо. Если я уменьшу Ограничение времени выключения Я полагаю, это поможет, но я бы предпочел не прерывать процесс немедленно.

Я попытался настроить обработчик Application_End в Global.asax, но я обнаружил, что его почти никогда не вызывают, потому что (я думаю) мой процесс все еще где-то выполняет поток (возможно, процесс регистрации).

Я пытался Application_Disposed, но до сих пор он не вызывается, когда IIS завершает процесс после истечения времени выключения, и, вероятно, к тому времени будет слишком поздно, если я вернусь к перезаписанному циклу, который я считаю предпочтительным.

Мне нужен сигнал от IIS «Эй, я хочу, чтобы ты остановился», который позволяет мне немедленно закрыть файл журнала, но его, похоже, не существует.

Любые предложения будут оценены.

1 Ответ

0 голосов
/ 09 ноября 2018

Проблема в самом приложении, а не в IIS.

Просто Disposed объект после вызова или записи в текстовый файл, чтобы избежать этой проблемы.

Я сталкивался с таким же образом раньше. Я также записываю в текстовый файл для журнала, тогда возникает ошибка "can't open the file because it's in use by another process.", но когда я disposed the object не просто слово disposed, вы должны тщательно проверить его для правильного удаления.

Все прошло, и приложение работает нормально.

Надеюсь, это поможет

...