我有一个与数据库通信的WCF服务。所有操作都通过该服务。 将异常返回给客户端的最佳方法是什么(在本例中为WPF应用程序)。
假设我在服务中有GetCustomer,它返回一个客户列表。但这是一个例外。我应该如何将此异常返回给客户端?
答案 0 :(得分:3)
Microsoft建议为WCF例外实施IErrorHandler
在显式控制应用程序的行为时 抛出异常,实现IErrorHandler接口并添加它 到ErrorHandlers属性。 IErrorHandler使您可以显式 控制生成的SOAP错误,决定是否将其发送回 客户端,并执行相关的任务,例如日志记录。错误 处理程序按照添加到的顺序调用 ErrorHandlers属性。
实现ProvideFault方法来控制故障消息 返回给客户。
实现HandleError方法以确保与错误相关的行为, 包括错误记录,确保快速失败,关闭 应用程序,等等。
Here是比MSDN更好的样本
IMyService proxy = ...; //Get proxy from somewhere
try {
proxy.MyMethod();
}
catch (CommunicationException) { ... }
catch (TimeoutException) { ... }
catch (FaultException<MyApplicationFault> myFault) {
MyApplicationFault detail = myFault.Detail;
//Do something with the actual fault
}
catch (FaultException otherFault) { ... }
答案 1 :(得分:-1)
执行此操作的一种方法是将有关任何潜在异常的信息作为服务合同的一部分。因此,在您的示例中,GetCustomer会返回您的客户列表。但它也会返回一个可能为空的数据集,其中包含有关发生的任何异常的数据。这是一个好主意,因为不是每个服务的消费者都是.NET应用程序,依赖于发送.NET错误是不明智的。