有没有办法从WCF REST方法返回不同的类型?

时间:2020-03-06 14:47:31  来源:igfitidea点击:

我正在尝试编写符合规范的Web服务,并且根据该方法是否成功完成,它需要一个不同的响应主体。我尝试创建两个不同的DataContract类,但是如何返回它们并使它们正确序列化呢?

解决方案

如果我们使用的是基于xml的绑定,那么我相信没有办法做到这一点。在这种情况下,一种简单的解决方案是在发生故障时仅包含消息标志的一部分,并在需要时将故障信息存储在某处。对于JSON绑定,我们可以使用一种方法,该方法返回一个对象,然后返回两种不同类型的对象。如果我没记错(这种情况很少见),那是可能的,因为如果对象清除了序列化属性,则JavaScriptSerializer类将使用反射。

指示WCF Web服务失败的最佳方法是抛出FaultException。服务web.config文件中有一些设置,这些设置允许将整个错误消息作为错误的一部分传递给客户端。

另一种方法可能是从相同的基类或者接口继承两个结果。该服务将返回基本类型的实例。然后,我们可以使用KnownType属性来通知客户端可能会返回多种类型。想到它,也许可以将Object用作基本类型,但是我还没有尝试过。

如果没有这两种方法,则可以创建一个包含结果和错误属性的自定义结果对象,然后客户可以决定要采取的措施。我必须对Silverlight 2使用这种方法,因为Beta 2尚未完全支持故障合同。它不是很漂亮,我通常不会推荐它,但是如果这是唯一可行的方法,或者我们认为这是适合我们情况的最佳方法...

如果我们在使用ADO.NET数据服务时遇到麻烦,那么我的经验较少。

这是有关实现FaultContracts的一些信息

答案是肯定的,但这很棘手,我们会在界面上失去强类型的输入。如果返回Stream,则数据可能是xml,文本,甚至是二进制图像。对于DataContract类,然后使用DataContractSerializer序列化数据。

有关更多详细信息,请参见BlogSvc,尤其是RestAtomPubService.cs WCF服务。请注意,该源代码还将向我们展示如何将不同类型的数据接受到需要内容类型映射器的WCF rest方法中。