One of the questions that we sometimes get involves the best way to pass error information from a web service back to the client. The MSDN article,  Handling and Throwing Exceptions in XML Web Services, documents the various options.

One good approach is to, in the exception handling code inside of your service, build and throw a SOAP exception to send back to the client.  The SOAP exception contains a "detail" field.  This detail field is an arbitrary XML document which you can use to pass, to the client, detailed information about the error.  The client, in its exception handler, catches the SOAP exception and then processes the detail XML document.

I've written a quick sample of both a service and a client to illustrate this.  In my simple example, I just pass the exception message from the service to the client using the detail XML document.  Since it is not a good idea to leak implementation details across service boundaries, in actual practice you would want to build a more appropriate detail message.