Я пытаюсь использовать мониторинг работоспособности ASP.net для регистрации необработанных исключений из веб-службы asmx. Я включил мониторинг работоспособности в web.config, но он ничего не регистрирует. Работает ли мониторинг работоспособности с веб-службами asmx? Я гуглил и, кажется, другие люди задавали тот же вопрос, но так и не получили определенного ответа.
Работает ли мониторинг работоспособности ASP.net с веб-службами asmx?
Ответы (5)
Пожалуйста, не публикуйте ответ, если он не отвечает на заданный вопрос. Половина ответов на что-то, кроме вопроса, сбивает читателя с толку. Мониторинг работоспособности не имеет ничего общего ни с «действительно необработанными» исключениями ASP.NET, ни с событием Application_Error.
Ответ - нет. Я немного покопался в этом, и по какой-то причине исключения, возникающие в веб-методах, никогда не доходят до поставщиков мониторинга работоспособности. Похоже, вы должны поймать их и справиться с собой.
Есть разница между обычной интерпретацией необработанных исключений и теми, на которые ссылается Том. Том имеет в виду действительно необработанные исключения, которые уничтожат ваш процесс w3wp.exe (до того, как он сможет его зарегистрировать), о чем я писал здесь: http://www.improve.dk/blog/2008/04/07/spawning-threads-in-aspnet-can-be-dangerous
Обычные необработанные исключения приведут к возникновению исключения и отображению страницы ошибки для пользователя/вызываемого. Однако это не приведет к сбою вашего процесса w3wp.exe. Эти исключения должны быть обнаружены мониторингом работоспособности.
В Global.asax, если вы используете автоматически сгенерированный Visual Studio, вы можете добавить код в метод Application_Error для обработки исключений и регистрации их любым способом по вашему выбору. Вы также можете переопределить метод Init и добавить обработчик событий для события Error класса.
В любом случае вы получаете только бесполезный ванильный объект EventArgs, но вы можете использовать HttpContext.Current.Server.GetLastError() для получения произошедшего исключения.
Как упоминалось в другом постере, это может не перехватывать исключения, которые выдаются асинхронно работающими делегатами, потоками, которые вы запускаете сами, или асинхронными задачами страницы, созданными с помощью Page.RegisterAsyncTask(). На них вам всегда нужно убедиться, что реализации имеют резервные копии исключений, чтобы исключения могли быть перехвачены, а рабочий процесс IIS не был прерван.
Это не сработает, потому что необработанные исключения не запускаются внутри какой-либо попытки/поймать. Из-за этого он не сможет его зарегистрировать. Взгляните на этот пост в блоге: http://blogs.msdn.com/tom/archive/2007/12/04/unhandled-exceptions-causing-asp-net-to-crash-in-net.-2-0.aspx
в этом случае должен работать продукт CALM; дайте мне знать, если это не так - я написал это ;-)