This seems to be a limitation of .NET SOAP implementation. Ideally things
should happen the way you're expecting (like they do in other SOAP
implementations), especially if both sides are built by you.
However, typically you should derive your SOAP exceptions from
System.Web.Services.Protocols.SoapException. This class has additional
properties you can set such as Actor, Code, Detail, Message when you throw
the exception at the server end.
Either ways, a SOAPException is raised on the client and you are left with
parsing the properties of this exception to figure out what really happened.
To go a step further, you could have a class that knows how to parse the
soap fault and raise the actual exception on the client provided, the client
is aware of that exception as well. Or maybe you could use SOAP Extensions
and do it that way.
--
Shiv R. Kumar
http://www.matlus.com