I'd like to trap any unhandled exception thrown in an ASP.NET web service, but nothing I've tried has worked so far.
First off, the HttpApplication.Error event doesn't fire on web services, so that's out..
The next approach was to implement a soap extension, and add it to web.config with:
<soapExtensionTypes>
<add type="Foo" priority="1" group="0" />
</soapExtensionTypes>
However, this doesn't work if you call the web method over JSON (which my web site does exclusively)..
My next idea would be to write my own HttpHandler for .asmx, which would hopefully derive from System.Web.Script.Services.ScriptHandlerFactory and do something smart. I haven't tried this yet.
Is there an approach I'm missing? Thanks!
Mike
UPDATE:
I'll summarize the possibly solutions here:
1) Upgrade to WCF which makes this whole thing much, much easier.
2) Since you cannot sub-class or override the RestHandler class, you would have to re-implement the whole thing as your own IHttpHandler or use reflection to manually call into its methods. Since the source to RestHandler is public and only about 500 lines long, making your own version might not be a huge amount of work but you'd then be responsible for maintaining it. I'm also unaware of any licensing restrictions involved with this code.
3) You can wrap your methods in try/catch blocks, or perhaps use LAMBDA expressions to make this code a bit cleaner. It would still require you to modify each method in your web service.