【问题标题】:Create a WCF Proxy for a Rest Web Service为 Rest Web 服务创建 WCF 代理
【发布时间】:2011-08-26 18:24:19
【问题描述】:

我有一个复杂的 WCF Rest 服务,它接受多个输入和对象。我不能简单地通过在 Fiddler 中执行 HTTP POST 来调用它,因为要提供的数据太多(我可以,但它会永远占用我)。所以我想使用代理在代码中做到这一点。有没有办法为 .NET 4 WCF Rest Service 生成代理?否则,你有什么建议让我轻松测试服务?

谢谢。

【问题讨论】:

    标签: .net wcf rest wcf-rest


    【解决方案1】:

    svcutil.exe 将创建一个代理类,您可以在调用应用程序中使用该代理类,它允许您调用适当的方法并在代码中传递参数

    【讨论】:

    • svcutil 不适用于 REST 端点 - 它不理解 [WebGet] 或 [WebInvoke] 等属性,因为它们未在服务的 WSDL/元数据中公开。
    【解决方案2】:

    您可以使用与非 RE​​STful WCF 服务相同的步骤创建代理:

    // Create the proxy
    ChannelFactory<IContract> channelFactory = new ChannelFactory<IContract>("endpointName");
    var restfulProxy = factory.CreateChannel();
    
    // Invoke a method
    var response = proxy.MyRestfulMethod("param1", "param2");
    

    【讨论】:

    • 如果配置中定义的“端点”正确设置了适当的绑定(例如WebHttpBinding)和行为(例如WebHttpBehavior),这将起作用,但出于测试目的,我发现它通常更容易保留所有信息都集中在一个地方(代码)。
    【解决方案3】:

    没有为 WCF REST 服务创建代理的标准方法(没有用于 REST 的 WSDL,一种新兴标准 WADL,并未被广泛采用,WCF 也不支持它)。出于测试目的,您应该与客户端共享接口,并使用 ChannelFactory - 并在工厂的 Endpoint 属性中设置适当的行为,或者使用辅助类 WebChannelFactory为你做。

    假设接口被称为 ITest,这就是你所拥有的:

    Uri serviceUri = new Uri("http://my.service.com/endpoint");
    WebChannelFactory<ITest> factory = new WebChannelFactory<ITest>(serviceUri);
    ITest proxy = factory.CreateChannel();
    Assert.AreEqual(9, proxy.Add(4, 5));
    

    【讨论】:

      【解决方案4】:

      虽然目前没有使用 WCF REST 服务创建代理的标准方法,但您可以使用 REST Starter kit 中的“将 XML 粘贴为类型”工具来执行此操作。这适用于默认 WCF /help 页面中显示的 xml,并生成与结构匹配且可以使用的 C# 类。另外,请观看此视频以了解它的实际效果 - Consumer Twitter in 3 minutes

      【讨论】:

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