WCF 客户端不遵循协定 UriTemplates

本文关键字:UriTemplates 客户端 WCF | 更新日期: 2024-10-20 13:55:02

我在WCF服务的ServiceContract中定义了一个函数,如下所示:

[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/test")]
CommandResponse Test();

另一方面,在客户端应用程序中,我通过Visual Studio中的"添加服务引用"添加了WCF服务。调用服务测试函数时,使用:

var test = m_ServiceClient.Test();

我收到一个错误,说:

Operation 'GetUser' of contract... specifies multiple request body parameters to be serialized ...

GetUser(( 是我在服务合约中的另一个函数(也是一个 GET 函数,但在 UriTemplate 中带有参数(。我的猜测是,客户端正在使用其应有的参数调用函数,但请求将发送到错误的 UriTemplate(或者根本没有模板,它只是跳转到某种默认值(。

我必须遵循任何特殊说明才能让客户了解 UriTemplates 的功能?

我已经搜索了所有内容,找不到一个有助于解决此问题的页面......

WCF 客户端不遵循协定 UriTemplates

当您

通过WebHttpBinding公开服务时,将使用 WebInvoke/WebGet 属性,该服务用于以 REST 样式使用 WCF 服务。为了通过 SOAP 访问该方法,请添加[OperationContract]属性并通过 basicHttpBinding 公开端点。

如果要以 REST 样式访问服务,则应使用 HttpWebRequest 类来创建请求,而不是添加Add Service Reference

为了实现两者,即通过 SOAP 和 REST 访问服务,只需添加[OperationContract]WebInvoke 属性,并使用 basicHttpBinding 公开另一个端点元素

为了让客户端识别 UriTemplates 并以模板定义的格式将每个方法传递给它自己的 Url 我将服务合同接口复制到客户端,然后创建了一个指向服务基 URL 的通道

WebChannelFactory<IServiceContract> cf = new WebChannelFactory<IServiceContract>(new Uri("http://...."));
var service = cf.CreateChannel();

生成的"服务"是一个直接与 Web 服务一起使用的可用接口。