Я немного озадачен этим и надеялся найти здесь ответы.
По сути, у меня есть приложение ASP.NET, которое работает на 2 серверах. Сервер A имеет всю бизнес-логику / доступ к данным, предоставляемый в виде веб-служб, а сервер B имеет веб-сайт, который общается с этими службами (через WCF, с привязкой net.tcp).
Проблема возникает через несколько секунд после того, как IIS на сервере A инициирует перезапуск пула приложений. Перезапуск происходит после отведенного времени (с использованием 29 часов по умолчанию, установленных в IIS).
В журнале сервера (Сервера A):
Рабочий процесс с идентификатором процесса
'####' обслуживающий пул приложений
'AppPoolName' запросил переработку
потому что рабочий процесс достиг своего
допустимое время обработки.
Я считаю, что это нормальное поведение. Проблема в том, что через несколько секунд я получаю это исключение на сервере B:
Этот канал больше не может использоваться для
отправлять сообщения в качестве сеанса вывода
был автоматически закрыт из-за
инициированное сервером отключение. Или
отключить автоматическое закрытие, установив
DispatchRuntime.AutomaticInputSessionShutdown
ложь или рассмотреть возможность изменения
протокол выключения с пульта
сервер.
Это происходит не на каждом цикле; Я предполагаю, что это происходит, когда кто-то посещает сайт с запросом, пока происходит переработка.
Кроме того, мое заявление закрыто, пока я не вмешаюсь; это исключение продолжает возникать каждый раз, когда на страницу поступает следующий запрос. Я вмешиваюсь, редактируя файл web.config (добавляя пробел или что-то доброкачественное в конец файла) и сохраняя его - я предполагаю, что это заставляет мое приложение перекомпилироваться и восстанавливает сервисы. Я также экспериментировал с запуском командного файла, который делает это для меня каждый раз, когда происходит исключение;)
Теперь я едва мог найти информацию об этом исключении, и я некоторое время искал. Большая часть информации, которую я нашел, относится к настройкам WCF, которые я не использую.
Я уже прочитал «DispatchRuntime.AutomaticInputSessionShutdown», и я не думаю, что это относится к этой ситуации. Это конкретное свойство относится к сервису, автоматически отключающемуся в ответ на поведение на стороне клиента, что здесь не происходит. Здесь служба отключена из-за IIS.
Я прочитал этот , который прошел какую-то работу, чтобы автоматически восстановить сервис, но я действительно хочу понять, что здесь происходит, а не взламывать его!
Я начал играть с настройками в IIS7, в частности, включив / выключив Overlapped Recycling и увеличив время запуска / завершения процесса. Мне интересно, безопасно ли полностью отключить переработку (я полагаю, если я введу 0 для интервала времени переработки?) Но опять же, я хочу знать, что происходит!
В любом случае, если вам нужна дополнительная информация, дайте мне знать. Заранее спасибо!