How to return WebService Exception [Q&A]
Question was:
vWhat is the best way to return an error from webservice? Can I simply throw the exception in my service or do I have to do some work to package the error message into the SOAP return?
Answer:
Only possible way to pass exception is to build SOAP Exception and to generate XML which contains all necessary info - Type of exception, message, fields. Actually, in general case you need wrapper in EVERY WebMethod:
[WebMethod]
public void Method()
{
try { /* code here */ }
catch (Exception e)
{
throw ExceptionWrapper.WrapException(e); }
}
Warning:
For some reason, Application.OnError event do not invoked for WebServices.
Some code fragments concentrated on wrapping/unwrapping Exception properties to xml which I hope could be helpful and includes example of custom WrapException method:
http://dotnet.osypchuk.com/Sources/WsExceptionsClues.txt
The same technics could be used for any dotNet language - VB.NET, C#, or J#.
Update: Thanks to Martin Bohm [http://www.theserverside.net/user/userthreads.tss?user_id=587623]
It is possible to catch all exceptions in one place by Soap extenson, more details on
http://www.codeproject.com/aspnet/ASPNETExceptionHandling.asp
Applies to all dotnet languages: C#, VB.NET, C++.NET, J#