Как обнаружить, если текущий пул приложений заканчивается в IIS7.5 и Asp. Сетевые 3.5 +

Хорошо - точно как вопрос подвергают состояния - какие-либо идеи о том, как Вы могли бы сделать это?

Я просматривал объекты в Системе. Сеть. При хостинге, но ничто не выделяется.

Причина? Я получаю одну или две ошибки приложения, которые обычно происходят во время перерабатывания (они происходят на расстоянии приблизительно в 25 часов, и я уехал, мой пул приложений перерабатывают время в значении по умолчанию), и таким образом, я хочу знать, происходят ли они на потоке, это находится в пуле, который это закрывает, или то, которое это - запуск (редактор/луг).

17
задан Andras Zoltan 10 August 2010 в 12:21
поделиться

2 ответа

Недавно я наткнулся на статью о Brain.Save () , в которой говорится именно об этом вопросе с точки зрения хостинга WCF (он же Стив Мэн - менеджер программы в Редмонде из отдела подключенных сервисов) ).

У них должна быть возможность сделать это, когда служба WCF размещена внутри Asp.Net, поскольку они должны иметь возможность отключать все открытые прослушиватели, чтобы механизм WCF в новом домене приложения мог открыть их все. снова.

Как показано в статье, ответ - реализовать интерфейс IRegisteredObject , вызвать ApplicationManager.CreateObject , чтобы создать экземпляр вашего объекта, а затем зарегистрировать его в HostingEnvironment. RegisterObject (все подробно описано в документации MSDN для интерфейса).

Когда реализация этого объекта IRegisteredObject.Stop (bool) вызывается с параметром false , это уведомление о том, что домен приложения закрывается и объект должен быть незарегистрированный (что-то вроде глобального удаления) с вызовом HostingEnvironment.UnregisterObject .

Когда он вызывается с true , это означает, что вы не отменили регистрацию вовремя, и что, если вы не отмените регистрацию немедленно, это будет сделано за вас.

Я определенно могу использовать этот механизм, чтобы узнать, когда возникает исключение, убивается домен приложения или нет. Природа рассматриваемого объекта, который вызывает исключение, означает, что если он не при выключении, он должен быть во время первоначального запуска.

В равной степени, однако, я вполне могу начать изучать этот механизм устойчивости для другой моей более сложной статической информации!

История

В статье также объясняется некоторая история и обоснование того, почему вы хотели бы использовать IRegisteredObject вместо Application_Start и Application_End ] в global.asax :

Традиционные приложения ASP.NET могут перехватывать события жизненного цикла приложения (запуск / завершение работы приложения) путем реализации таких методов, как Application_Start и Application_Stop, в global.asax. Однако global.asax предназначен для кода приложения. Части инфраструктуры (одной из которых является система размещения WCF) нуждаются в механизме подключения событий жизненного цикла AppDomain, которые не включают дамп кода инфраструктуры в вашем файле global.asax. Это пространство зарезервировано для вас, пользователя, и было бы грубо использовать его кучей хостинга, который нам нужен, чтобы все это работало. Вместо этого специалисты ASP.NET проделали большую работу во время выпуска Whidbey, чтобы открыть API хостинга и упростить для таких людей, как WCF, возможность подключиться к этим событиям жизненного цикла таким образом, чтобы это было незаметно для кода приложения.

18
ответ дан 30 November 2019 в 12:26
поделиться

Не уверен, что именно вы хотите делать, когда пул приложений перерабатывается, но если вы добавите приведенный ниже обработчик событий в Global.asax, то код в нем будет выполняться при закрытии приложения.

 protected void Application_End(object sender, EventArgs e)
 {
 }
1
ответ дан 30 November 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: