2010-12-27 5 views
5

Implementierter WCF-Dienst (.net 4.0). Serviceseite Config wie folgt aussieht:Wie kann der WCF-Dienst im REST-Modus genutzt werden?

<endpoint address="" 
      binding="webHttpBinding" 
      bindingNamespace="https://mydomain/myservice/services"  
      behaviorConfiguration="WebBehavior" 
      contract="MyService" /> 

<endpointBehaviors> 
    <behavior name="WebBehavior"> 
    <webHttp /> 
    </behavior> 
</endpointBehaviors> 

Der Versuch, Service in Web-App verbrauchen, web.config wie folgt aussieht:

<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> 

Ich Ausnahme bekommen, wenn Service Aufruf:

Operation 'Method1' des Kontrakts 'IMyService' gibt mehrere Anforderungs-Body-Parameter an, die serialisiert werden, ohne jegliche Wrapper Elemente. Es kann höchstens ein Body-Parameter ohne Wrapper Elemente serialisiert werden. Entfernen Sie entweder die zusätzlichen Körper Parameter, oder legen Sie die BodyStyle Eigenschaft auf dem WebGetAttribute/WebInvokeAttribute auf Wrapped fest.

Nach einigen googeln, haben wir [WebGet(BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Xml)] auf Methoden gesetzt, aber kein Erfolg ...

Eine interessante Sache: Es ist immer die gleiche Methode Namen in Ausnahme, auch andere Methoden, ich rufe. ..

Service Arbeiten in REST-Modus in Ordnung, während sie mit Browser-Test durch Methodennamen und notwendige Eingabe ... Paramater

+2

Können Sie uns den ** Servicevertrag ** mit der Definition Ihrer Servicemethoden zeigen? –

Antwort

3

Es scheint, dass Sie wie in diesem Thread ähnliches Problem konfrontiert sind: WCF Service Proxy throws exception when more than one parameter is used in [OperationContract] method

"Es sieht so aus, als hätten Sie den Proxy-Code mithilfe des Dialogfelds Service-Referenz hinzufügen in VS erstellt. Der VS ASR-Dialog unterstützt die WCF-REST nicht vollständig. Daher fehlt dem Proxy-Code das [WebInvoke] -Attribut. Können Sie versuchen, das Attribut [WebInvoke (BodyStyle = WebMessageBodyStyle.Wrapped)] für Operationen im Clientproxy hinzuzufügen?

+1

Was meinen Sie damit? "Attribut bei Operationen im Client-Proxy hinzufügen"? In welcher Datei muss es hinzugefügt werden? – iamCR

Verwandte Themen