WCF have exception pass to the client

夙愿已清 提交于 2020-01-12 14:34:07

问题


I have a service that may throw exceptions. I want to be able to catch the exceptions at the client. The main 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?


回答1:


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)
{
   ...
}



回答2:


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



来源:https://stackoverflow.com/questions/5077140/wcf-have-exception-pass-to-the-client

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!