Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有一种方法可以从WCF REST方法返回不同的类型?_C#_.net_Wcf_Rest - Fatal编程技术网

C# 有没有一种方法可以从WCF REST方法返回不同的类型?

C# 有没有一种方法可以从WCF REST方法返回不同的类型?,c#,.net,wcf,rest,C#,.net,Wcf,Rest,我正在尝试编写一个符合规范的web服务,它需要一个不同的响应主体,这取决于该方法是否成功完成。我尝试创建了两个不同的DataContract类,但是如何返回它们并正确地序列化它们呢 如果您使用的是基于xml的绑定,那么我认为没有办法做到这一点。在这种情况下,一个简单的解决方案是,如果出现故障,只保留部分消息标志,并在需要时将故障信息存储在某个位置。对于JSON绑定,您可以使用一个方法返回一个对象,然后返回两种不同类型的对象。如果我没记错的话(这很少见),这是可能的,因为如果对象没有序列化属性,J

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

如果您使用的是基于xml的绑定,那么我认为没有办法做到这一点。在这种情况下,一个简单的解决方案是,如果出现故障,只保留部分消息标志,并在需要时将故障信息存储在某个位置。对于JSON绑定,您可以使用一个方法返回一个对象,然后返回两种不同类型的对象。如果我没记错的话(这很少见),这是可能的,因为如果对象没有序列化属性,JavaScriptSerializer类会使用反射。

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

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

如果这两种方法都失败,您可以创建一个同时包含结果和错误属性的自定义结果对象,然后客户机可以决定采取哪种操作。我不得不在Silverlight 2中使用这种方法,因为Beta 2尚未完全支持故障契约。它并不漂亮,我通常不会推荐它,但如果它是唯一有效的方法,或者你觉得它是适合你情况的最佳方法

如果您在使用ADO.NET数据服务时遇到问题,我在这方面的经验就更少了


在执行FaultContracts时,答案是肯定的,但这很棘手,而且在界面上无法输入强类型。如果返回,则数据可以是xml、文本,甚至是二进制图像。对于DataContract类,然后使用DataContractSerializer序列化数据


有关更多详细信息,请参阅和更具体的。请注意,该源代码还将向您展示如何将不同类型的数据接受到需要内容类型映射器的WCF rest方法中。

我在源代码中没有找到该文件(RestAtomPubService.cs),我是否错过了该文件或已将其删除?谢谢。因为WCF不够灵活,不能满足我们的需要,我们已经离开WCF休息了。我认为这个档案应该在历史上仍然存在。