WCF 应用程序遇到的错误属于以下三个组之一:
通信错误
代理/通道错误
应用程序错误
当网络不可用、客户端使用不正确的地址或服务主机未侦听传入消息时,会发生通信错误。 此类型的错误将作为CommunicationException或CommunicationException派生的类返回到客户端。
代理/通道错误是在通道或代理本身中发生的错误。 此类型的错误包括:尝试使用已关闭的代理或通道、客户端和服务之间存在协定不匹配,或者服务拒绝客户端凭据。 此类别中存在许多不同类型的错误,无法在此处列出。 此类型的错误将返回到客户端 as-is(不对异常对象执行转换)。
执行服务操作期间发生应用程序错误。 此类错误将作为FaultException或FaultException<TDetail>发送给客户端。
WCF 中的错误处理由以下一个或多个执行:
直接处理引发的异常。 只能针对通信错误以及代理/通道错误执行此操作。
使用错误协定
实现 IErrorHandler 接口
处理 ServiceHost 事件
错误协定
故障契约允许你以独立于平台的方式定义在服务操作期间发生的错误。 默认情况下,从服务作中引发的所有异常都将作为 FaultException 对象返回到客户端。 对象 FaultException 将包含很少的信息。 通过定义错误协定并作为 FaultException<TDetail> 返回错误,可以控制发送到客户端的信息。 有关详细信息,请参阅 在协定和服务中指定和处理错误。
IErrorHandler
该 IErrorHandler 接口允许你更好地控制 WCF 应用程序如何响应错误。 它可让你完全控制返回到客户端的错误消息,并允许执行自定义错误处理,例如日志记录。 有关 IErrorHandler 和扩展对错误处理和报告的控制的详细信息
ServiceHost 事件
类 ServiceHost 承载服务并定义处理错误可能需要的多个事件。 例如:
有关详细信息,请参阅 ServiceHost