【问题标题】:Can I generate a service reference automatically for a REST WCF service?我可以为 REST WCF 服务自动生成服务引用吗?
【发布时间】:2012-04-19 16:26:37
【问题描述】:

对于 SOAP WCF over REST (json) wcf,我能看到的唯一参数是,一旦创建了我的服务,我就可以在 Visual Studio 中添加一个引用,并且我会为我和一个客户准备好大量强类型类我可以通过它调用我所有的网络方法的类。据我所知,它甚至设置了 web.config。

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

【问题讨论】:

标签: c# json wcf rest soap


【解决方案1】:

不使用 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 的帖子有更多关于这个问题的信息。

【讨论】:

  • 链接线程中的示例代码对 Carlos 很有帮助。我可以建议你在这里总结一下并包含代码吗?
  • 用更多细节扩展了答案。
【解决方案2】:

很老的问题,新的答案。

今天使用 openapi (swagger) 我可以通过使用 swagger inspector 做示例来实现这一点,我可以记录我的休息服务,并创建一个规范 yml/json 文件,允许验证和验收标准以及 java 的自动化客户端, python,c#,ruby,javascript 等我确定

【讨论】:

    【解决方案3】:

    我想详细说明一下:

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

    1. 是返回 JSON 的操作
    2. 是一个单一的 XML 操作,它返回一个类包装器,其中包括我允许的所有服务类,我称之为 Discover:

    public class Discover
    {
      public Manager Manager {get;}
      public Employee Emp {get;}
      ....
    }
    
    [OperationContract]
    public Discover DiscoverDTOs()
    

    【讨论】:

      【解决方案4】:

      你可以,间接地。虽然 Visual Studio 生成的客户端不起作用,但该客户端实现了一个接口,也生成了,您可以像这样使用它:

      WebChannelFactory<IService> factory = new WebChannelFactory<IService>(new Uri(endpointAddress));
      
      IService proxy = factory.CreateChannel();
      
      int result = proxy.Operation(1, 2, 3);
      

      WebChannelFactory 有另一个重载接受WebHttpBinding,您可以根据服务配置进行配置,也可以在 app.config 文件中手动进行此配置。

      【讨论】:

        猜你喜欢
        • 2018-06-15
        • 2010-11-26
        • 2023-04-01
        • 2012-06-09
        • 1970-01-01
        • 2013-04-13
        • 2011-07-13
        • 1970-01-01
        • 2015-09-09
        相关资源
        最近更新 更多