我可以自动为REST WCF服务生成服务引用吗?

时间:2012-04-19 16:26:38

标签: c# json wcf rest soap

我可以看到SOAP WCF over REST(json)wcf的唯一参数是,一旦创建了我的服务,我就可以在visual studio中添加一个引用,我可以为我和客户端添加一些强类型类我可以通过我所有的webmethod调用的类。据我所知,它甚至设置了web.config。

然而,当我公开REST(json)服务时,我仍然得到一个WSDL。所以我想知道还有一种方法可以自动构建我的引用吗?

4 个答案:

答案 0 :(得分:3)

不使用WCF工具。与SOAP(具有用于描述服务的已建立协议 - WSDL)不同,REST不具备。 WADL就是这样一种协议,但它不是太普遍,WCF也不支持它。您仍然可以获得WSDL,因为WCF将从服务中描述它所能提供的一切。但是,WSDL将没有<wsdl:port>元素,它将描述REST端点,这就是您获取WSDL但无法生成对它的引用的原因。

http://blogs.msdn.com/b/carlosfigueira/archive/2012/03/26/mixing-add-service-reference-and-wcf-web-http-a-k-a-rest-endpoint-does-not-work.aspx上的帖子提供了有关此问题的更多信息。

答案 1 :(得分:0)

我想详细说明:

虽然确实无法使用JSON REST WCF服务获取WSDL添加服务引用,但我所做的是创建两个met数据挂钩:

  1. 是返回JSON的操作
  2. 是一个返回类包装器的XML操作系统,它包含我允许的所有服务类,我称之为发现:
  3. public class Discover
    {
      public Manager Manager {get;}
      public Employee Emp {get;}
      ....
    }
    
    [OperationContract]
    public Discover DiscoverDTOs()
    

答案 2 :(得分:0)

您可以间接地进行。尽管Visual Studio生成的客户端无法使用,但该客户端实现了一个接口,该接口也已生成,您可以像这样使用该接口:

public/data/data.json

WebChannelFactory<IService> factory = new WebChannelFactory<IService>(new Uri(endpointAddress)); IService proxy = factory.CreateChannel(); int result = proxy.Operation(1, 2, 3); 还有一个接受WebChannelFactory的重载,您可以根据服务配置进行配置,也可以在app.config文件中手动进行此配置。

答案 3 :(得分:0)

非常老的问题,较新的答案。

今天使用openapi(swagger),我可以通过使用swagger inspector进行采样来实现此目的,我可以记录我的其余服务,并创建一个规范yml / json文件,允许进行验证和接受标准,以及用于我确定可以使用java,python,c#,ruby,javascript和其他