C# 正在从WCF服务返回结果/错误。复杂类型还是异常?

C# 正在从WCF服务返回结果/错误。复杂类型还是异常?,c#,.net,wcf,custom-exceptions,C#,.net,Wcf,Custom Exceptions,几天前,我问了一个非常类似的问题。我想在应用程序中返回值/错误。我接受的答案不是将错误作为和对象返回,而是抛出自定义异常。 现在,我不确定如何使用WCF服务来处理它。我希望服务将尽可能简单,因为它可以为客户 一般来说,我的项目是这样的: 客户端->WCF服务应用程序->数据库 在WCF应用程序中,我有自己的异常类,它运行良好。但假设客户想从db得到什么。我的问题是: 在我的应用程序之外,我应该向客户端返回什么? A.复杂类型:带有元数据的值(关于可能错误的信息[1])。当真的发生意外错误时,抛出

几天前,我问了一个非常类似的问题。我想在应用程序中返回值/错误。我接受的答案不是将错误作为和对象返回,而是抛出自定义异常。 现在,我不确定如何使用WCF服务来处理它。我希望服务将尽可能简单,因为它可以为客户

一般来说,我的项目是这样的: 客户端->WCF服务应用程序->数据库

在WCF应用程序中,我有自己的异常类,它运行良好。但假设客户想从db得到什么。我的问题是: 在我的应用程序之外,我应该向客户端返回什么? A.复杂类型:带有元数据的值(关于可能错误的信息[1])。当真的发生意外错误时,抛出异常。 B.只有一个值(当可能发生错误时-抛出异常)


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

如何解决这个问题取决于客户。如果必须支持Silverlight客户端,则抛出异常是不可能的,因为使用浏览器HTTP堆栈的Silverlight客户端无法处理这些异常。对于Silverlight客户端,我通常推荐(并使用我自己)所描述的方法。

根据设计,WCF对客户端隐藏异常。当异常发生时,由开发人员决定向客户机返回哪些信息(如果有的话)

我将研究如何使用
FaultContract
FaultContract
,并通过该机制返回您希望返回的异常

以下是一些文章:

您可能还需要查看WCF的IErrorHandler:


故障契约-这就是我现在使用的。当发生错误/异常时,我将我的“错误契约”异常抛出给客户机。我不确定。在您的第一个链接(以计算器为例)中,服务可以检测数字是否为零,并通过一条简单的消息将该信息返回给客户端,而不是异常。我希望一个健壮的服务(或应用程序)能够以非异常的方式处理预期的异常(我希望这是有意义的)。我建议将FaultContracts作为一种将异常数据返回给客户机以解决意外问题的方法。而且,正如Oliver Wiechhold指出的,它对Silverlight完全没有用处(我不知道Silverlight没有使用过它)。对于返回的结果(即使是错误类型的结果,如除以零),我希望服务将其作为消息返回,而不是像您所说的异常。非常感谢您的时间。很好。我不确定客户的情况-可能是silverlight。所以像Tim说的那样,在这种情况下使用故障契约不是一个好主意,对吗?我非常喜欢这种解决方案。我将在ASP.NET web应用程序中使用我的WCF服务。但将其与WPF或Windows窗体客户端一起使用是否非常糟糕?我将遵循您的链接中描述的示例。Thank youTry
(也称为
标记的联合
),它包含一个值或一个错误。当我在WCF中使用它时,它变得非常强大。