繁体   English   中英

WCF客户端不遵循UriTemplates合同

[英]WCF Client does not follow contract UriTemplates

我在我的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的功能吗?

我一直在搜索,找不到帮助解决这个问题的单页...

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

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

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

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

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

生成的“服务”是一个可用的界面,可直接与Web服务一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM