如何在 REST 模式下使用 WCF 服务?
Posted
技术标签:
【中文标题】如何在 REST 模式下使用 WCF 服务?【英文标题】:How consume WCF service in REST mode? 【发布时间】:2011-05-31 05:10:22 【问题描述】:已部署 wcf 服务 (.net 4.0)。服务端配置如下:
<endpoint address=""
binding="webHttpBinding"
bindingNamespace="https://mydomain/myservice/services"
behaviorConfiguration="WebBehavior"
contract="MyService" />
<endpointBehaviors>
<behavior name="WebBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
尝试在 web 应用中使用服务,web.config
看起来像:
<system.serviceModel>
<client>
<endpoint name="MyServiceEndpointBasicHttp"
address="http://myDomain/myService"
binding="webHttpBinding" behaviorConfiguration="webBehavior"
contract="MyNamespace.IMyService" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
调用服务时出现异常:
合约操作'Method1' 'IMyService' 指定多个 请求正文参数为 没有任何包装的序列化 元素。最多一个身体参数 可以在没有包装器的情况下进行序列化 元素。要么删除多余的身体 参数或设置 BodyStyle 财产在 WebGetAttribute/WebInvokeAttribute 到 包裹起来。
经过一番谷歌搜索,我们在方法上设置了[WebGet(BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Xml)]
,但没有成功...
一个有趣的事情:异常中总是有相同的方法名称,即使我正在调用其他方法......
服务在 REST 模式下工作正常,同时通过输入方法名称和必要参数使用浏览器进行测试...
【问题讨论】:
您能否向我们展示服务合同以及您的服务方法的定义? 【参考方案1】:您似乎遇到了与此线程类似的问题:WCF Service Proxy throws exception when more than one parameter is used in [OperationContract] method
"您似乎在 VS 中使用添加服务引用对话框创建了代理代码。VS ASR 对话框不完全支持 WCF REST,因此,代理代码缺少 [WebInvoke] 属性。您可以尝试添加 [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)] 客户端代理中操作的属性?"
【讨论】:
“在客户端代理中的操作上添加属性”是什么意思?必须添加到哪个文件中?以上是关于如何在 REST 模式下使用 WCF 服务?的主要内容,如果未能解决你的问题,请参考以下文章