I have a service that may throw exceptions. I want to be able to catch the exceptions at the client. The ma开发者_如何学编程in Exceptions I am interested in are DbUpdateException
and InvalidOperationException
. For the rest of the exceptions it is enough to know that an exception has been throws.
How can I have exceptions caught in the client?
If your WCF service throws an exception, then by default it will come to the client as a FaultException
. You can configure your service to include exception details in faults, like so:
<serviceDebug includeExceptionDetailInFaults="true" />
But you probably don't want to do this, it's never a good idea to expose internal implementation details to clients.
If you want to distinguish between different service faults, you can create your own class, and register this as a fault that your service will throw. You can do this at the service contract level:
public interface YourServiceContract
{
[FaultContract(typeof(YourFaultClass))]
[OperationContract(...)]
YourServiceResponseClass YourServiceOperation(YourServiceRequestClass request);
}
The class you use for your fault contract doesn't have to implement anything (as you would have to do for a custom Exception
), it will just get wrapped in a generic FaultContract
object. You can then catch this in the client code like this:
try
{
// service operation
}
catch (FaultException<YourFaultClass> customFault)
{
...
}
catch (FaultException generalFault)
{
...
}
Define a FaultContract so any clients can listen for that and include only the exception details you want to expose publicly.
Read this for more info: MSDN Docs
精彩评论