代码之家  ›  专栏  ›  技术社区  ›  kgriffs

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

  •  6
  • kgriffs  · 技术社区  · 16 年前

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

    3 回复  |  直到 16 年前
        1
  •  2
  •   Chuck    16 年前

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

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

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

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

    Here's some information 论合同的履行

        2
  •  1
  •   Brent Arias    9 年前

    答案是 但这很棘手,你会在界面上失去强大的输入功能。如果您返回 流动 然后,数据可以是xml、文本,甚至是二进制图像。对于DataContract类,然后使用 数据序列化程序 .

    BlogSvc RestAtomPubService.cs WCF service 更多细节。注意,源代码还将向您展示如何将不同类型的数据接受到需要内容类型映射器的WCF rest方法中。

        3
  •  0
  •   scmccart    16 年前

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