【问题标题】:How do I make use of a WCF service response without setting up a data contract?如何在不设置数据协定的情况下使用 WCF 服务响应?
【发布时间】:2012-09-28 23:20:34
【问题描述】:

背景

我继承了一个项目,该项目依赖于几个不同的 WCF“mex”端点的数据。我的特定项目的目标,一旦完成,就是作为一个 API 层调用这些 legacy WCF 服务,操作返回的对象(仅在极少数情况下),序列化为 JSON,然后对提出请求的客户。

C#、MVC 4、.NET 4。

我对 RESTful Web 服务非常有经验,但对 WCF 却没有。

这是一个端点 uri 的示例:

http://product.sqa.acme.com/products.svc/mex

问题

在设置我的第一个使用这些 WCF 服务之一的类时,我似乎必须设置一个完整的数据协定才能使用返回的对象。它是否正确?如果这不正确,我如何调用 WCF 接口的方法(即IProductService >> GetProductById(123))然后在没有契约的情况下操作生成的对象?

我试过这个:

var ip = (IProductService)new ProductServiceClient("http://product.sqa.acme.com/product.svc/mex");
            var product = ip.GetProductById("DVP4963619");

但代码失败,因为没有找到合约。由于我将要做的 90% 只是简单地传递一个请求,然后将响应序列化为 JSON,因此必须为我所做的每个服务调用定义一个合同似乎有点过头了。任何帮助表示赞赏。

谢谢,

马特

【问题讨论】:

    标签: c# wcf rest .net-4.0


    【解决方案1】:

    使用服务,您只需将 Visual Studio 的添加服务引用向导指向您拥有的“mex”端点,它就会为您生成一个客户端,包括用于那个。

    要创建返回数据的 (REST) 服务,您有两个选择。您可以创建代表您想要返回的数据的数据合约(或重用工具生成的数据合约)。或者,如果您想完全控制操作的输出,您可以绕过这些。如果操作返回 Stream 类型,您可以将任何内容(JSON 或非 JSON)写入输出(通过返回该抽象类型的子类),因此您不必为此创建数据协定。您可以在http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx 找到更多这种“原始模式”。

    另一种返回数据的方法是使用 ASP.NET Web API 之类的东西,它确实支持使用 Newtonsoft.Json.Linq 命名空间中的 JSON.NET 类型的“无类型 JSON”模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多