我有一个WCF服务与数据库交谈。所有的操作都通过该服务。 向客户端返回异常的最佳方式是什么(在本例中是WPF应用程序)。处理异常WPF应用程序与WCF服务
可以说我有GetCustomer在返回客户列表的服务中。但是这有一个例外。我应该如何将这个异常返回给客户端?
我有一个WCF服务与数据库交谈。所有的操作都通过该服务。 向客户端返回异常的最佳方式是什么(在本例中是WPF应用程序)。处理异常WPF应用程序与WCF服务
可以说我有GetCustomer在返回客户列表的服务中。但是这有一个例外。我应该如何将这个异常返回给客户端?
做到这一点的一种方法是将有关任何潜在例外的信息作为您的服务合同的一部分。因此,在您的示例中,GetCustomer会返回您的客户列表。但它也会返回一个可能为空的关于发生的任何异常的数据集。这是一个好主意,因为并不是所有服务的使用者都将成为.NET应用程序,而是依靠发送.NET错误并不明智。
Microsoft建议实施IErrorHandler为WCF例外
要明确控制应用程序时的行为 抛出异常,实现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) { ... }
在您的示例中,如何将此异常/故障返回给客户端? – VoodooChild 2011-12-20 14:12:03
你不会从服务返回异常,而是从服务抛出它抛出new FaultException
-1:请说明为什么这会是一个好主意。 – 2011-12-20 00:15:21