从WCF服务返回结果/错误。复杂类型还是例外?

时间:2011-08-02 08:21:35

标签: c# .net wcf custom-exceptions

前几天我问了一个非常相似的问题。我是关于在应用程序内返回值/错误。我接受一个不返回错误的答案作为对象但抛出自定义异常。 现在,我不确定如何使用WCF服务来处理它。我希望服务能够像客户一样简单。

一般来说,我的项目看起来像这样: 客户 - > WCF服务应用程序 - >数据库中。

在WCF应用程序内部,我有自己的异常类,它工作正常。但是,让我们说客户想要从db。我的问题是: 我应该在应用程序之外返回客户端? A.复杂类型:具有元数据的值(关于可能的错误的信息[1])。当真正发生意外错误时抛出异常。 B.只是一个值(当可能发生错误时 - 抛出异常)

[1] - 无效的字符串格式,无法连接到数据库或类似的那样。我的意思是 - 如果我知道错误究竟是什么 - 为什么要向客户端抛出异常 - 我不确定。

2 个答案:

答案 0 :(得分:2)

决定如何解决这个问题取决于客户。如果您必须支持Silverlight客户端,则抛出异常是不可能的,因为使用浏览器HTTP Stack的Silverlight客户端无法处理它们。对于Silverlight客户端,我通常建议(并使用自己)描述here的方法。

答案 1 :(得分:1)

按照设计,WCF会隐藏客户端的异常。开发人员可以确定在发生异常时将哪些信息(如果有)返回给客户端。

我会考虑使用FaultContractFaultContract<T>,并通过该机制返回您希望的异常。

以下是一些文章:

Fault Contract WCF Tutorial Fault Contract

您可能还想查看WCF的IErrorHandler:

IErrorHandler Interface