1

背景

我继承了一个项目,该项目的数据依赖于几个不同的 WCF“mex”端点。一旦完成,我的特定项目的目标是充当调用这些遗留WCF 服务的 API 层,操作返回的对象(仅在极少数情况下),序列化为 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,因此必须为我进行的每个服务调用定义一个合同似乎有点过头了。任何帮助表示赞赏。

谢谢,

马特

4

1 回答 1

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”模型。

于 2012-09-28T23:26:17.997 回答