Я хотел бы уловить любое необработанное исключение, созданное в веб-службе ASP.NET, но ничто из того, что я пробовал, пока не работает.
Во-первых, событие HttpApplication.Error не запускается в веб-службах, поэтому вы можете отключиться.
Следующий подход состоял в том, чтобы реализовать расширение мыла и добавить его в web.config с помощью:
<soapExtensionTypes>
<add type="Foo" priority="1" group="0" />
</soapExtensionTypes>
Однако это не работает, если вы вызываете веб-метод через JSON (что делает мой веб-сайт исключительно).
Моей следующей идеей было бы написать собственный HttpHandler для .asmx, который, мы надеемся, выйдет из System.Web.Script.Services.ScriptHandlerFactory и сделает что-то умное. Я еще не пробовал.
Есть ли какой-то подход, который мне не хватает? Спасибо!
Mike
UPDATE:
Я кратко изложу возможные варианты:
1) Поднимитесь на WCF, что значительно облегчает эту задачу.
2) Поскольку вы не можете подкласс или переопределить класс RestHandler, вам придется повторно реализовать все это как свой собственный IHttpHandler или использовать отражение, чтобы вручную вызвать его методы. Поскольку источник для RestHandler является общедоступным и составляет всего около 500 строк, что делает вашу собственную версию не большой работой, но тогда вы будете нести ответственность за ее сохранение. Я также не знаю никаких лицензионных ограничений, связанных с этим кодом.
3) Вы можете обернуть свои методы в блоки try/catch или, возможно, использовать выражения LAMBDA, чтобы сделать этот код немного более чистым. Вам все равно потребуется изменить каждый метод в вашей веб-службе.