部署了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.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模式下正常工作......
答案 0 :(得分:3)
您似乎面临与此主题相似的问题: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)]客户端代理中的操作属性?“