如何在不设置数据协定的情况下使用WCF服务响应?

时间:2012-09-28 23:20:34

标签: c# wcf rest .net-4.0

背景

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

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,因此必须为我所做的每个服务调用定义一个合同。任何帮助表示赞赏。

谢谢,

马特

1 个答案:

答案 0 :(得分:3)

使用服务,您只需将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”模型。