为 Rest Web 服务创建 WCF 代理

Posted

技术标签:

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

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

谢谢。

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于为 Rest Web 服务创建 WCF 代理的主要内容,如果未能解决你的问题,请参考以下文章

WCF REST 到 Web API [关闭]

调试 WCF Web Api REST 服务的问题

WCF、Web API、WCF REST 和 Web 服务之间的区别?

尝试发布到 wcf rest 4 服务时出现错误请求

为 WCF REST 服务生成示例数据?

ASP.Net Web API 与 WCF - Web API 能否用于向单例 WCF 服务提供基于 REST 的通信?