2009-02-12 25 views
7

Ho creato il seguente servizio WCF RESTful, che funziona perfettamente durante l'esecuzione in VS.Perché questo servizio WCF non riconosce il parametro UriTemplate?

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json, 
    UriTemplate = "/sales/start={start}&end={end}")] 
List<Sales> GetSalesByDate(string start, string end); 

Tuttavia, durante la distribuzione di questo al mio server di prova (in esecuzione Win2K3 e IIS6) ho ricevuto il seguente errore del server:

operazione 'GetSalesByDate' nel contratto di usi 'ISalesService' GET, ma ha anche il corpo parametro 'start'. Le operazioni GET non possono avere un corpo. O rendere il parametro 'start' un parametro UriTemplate o passare da WebGetAttribute a WebInvokeAttribute.

Ovviamente ho già fatto "avviare" un UriParameter. Quindi qualcuno può dirmi perché viene lanciata un'eccezione?

EDIT: Per riferimento, ecco il mio file di configurazione:

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
     <services> 
      <service name="Services.SalesService"> 
       <endpoint behaviorConfiguration="webBehavior" 
          binding="webHttpBinding" 
          contract="Services.ISalesService"/> 
      </service> 
     </services> 
     <behaviors> 
      <endpointBehaviors> 
       <behavior name="webBehavior"> 
        <webHttp/> 
       </behavior> 
      </endpointBehaviors> 
     </behaviors> 
    </system.serviceModel> 
</configuration> 

risposta

10

Si scopre /sales/start={start}&end={end} non è una valida Uri (duh!). Dopo un po 'di prove ed errori, finalmente ho capito. Modificando l'UriTemplate con un '?' problema risolto.

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json, 
    UriTemplate = "/sales/?start={start}&end={end}")] 
List<Sales> GetSalesByDate(string start, string end); 

Grazie per il vostro aiuto!

+0

Non capisco perché ha funzionato sulla casella di sviluppo, ma non sul server. Ma sono contento che tu sia sbloccato! – Brian

+0

Anch'io. Funziona bene in VS con l'Uri errato. Strano, lo so ... –

4

So che è molto tardi, ma perché non hai usato il seguente formato.

UriTemplate = "/sales/{start}/{end}" 
Problemi correlati