如何在REST模式下使用WCF服务?

时间:2010-12-27 16:17:45

标签: .net rest wcf

部署了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模式下正常工作......

1 个答案:

答案 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)]客户端代理中的操作属性?“