2010-12-27 19 views
5

Servizio wcf distribuito (.net 4.0). config lato servizio si presenta come:Come si consuma il servizio WCF in modalità REST?

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

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

Cercando consumano servizio nel web app, web.config assomiglia:

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

sto ottenendo un'eccezione quando si chiama il servizio:

operazione 'Method1' del contratto 'IMyService' specifica più parametri del corpo di richiesta per essere serializzati senza alcun wrapper elementi. Al massimo un parametro del corpo può essere serializzato senza elementi wrapper . Rimuovere i parametri aggiuntivi del corpo o impostare la proprietà BodyStyle su WebGetAttribute/WebInvokeAttribute su Avvolto.

Dopo un po 'googling, abbiamo impostato [WebGet(BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Xml)] sui metodi, ma senza successo ...

Una cosa interessante: C'è sempre lo stesso nome del metodo in deroga, anche io sto chiamando altri metodi. ..

servizio funziona bene in modalità REST durante il test con il browser inserendo nome del metodo e paramaters necessarie ...

+2

Puoi mostrarci il ** contratto di servizio ** con la definizione dei tuoi metodi di servizio? –

risposta

3

sembra che stai affrontando problema simile come in questa discussione: WCF Service Proxy throws exception when more than one parameter is used in [OperationContract] method

"Sembra che sia stato creato il codice proxy utilizzando la finestra di dialogo Aggiungi riferimento servizio in VS. La finestra di dialogo ASR VSR non supporta completamente WCF REST, quindi il codice proxy manca dell'attributo [WebInvoke]. Puoi provare ad aggiungere l'attributo [WebInvoke (BodyStyle = WebMessageBodyStyle.Wrapped)] sulle operazioni nel proxy client? "

+1

Cosa intendi per "aggiunta di attributi sulle operazioni nel proxy client"? In quale file deve essere aggiunto? – iamCR

Problemi correlati