2009-02-12 8 views
7

Ich habe den folgenden RESTful WCF-Dienst erstellt, der problemlos funktioniert, wenn Sie ihn in VS ausführen.Warum erkennt dieser WCF-Dienst den UriTemplate-Parameter nicht?

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

Wenn jedoch diese auf meinem Testserver bereitstellen (Lauf Win2K3 und IIS6) erhielt ich folgende Serverfehler:

Operation ‚GetSalesByDate‘ in Auftrag ‚ISalesService‘ Anwendungen, aber auch Körper Parameter 'Start'. GET-Operationen können keinen Körper haben. Setzen Sie den Parameter entweder auf einen UriTemplate-Parameter oder wechseln Sie von WebGetAttribute zu WebInvokeAttribute.

Offensichtlich habe ich bereits einen UriParameter 'starten'. Kann mir jemand sagen, warum eine Ausnahme ausgelöst wird?

EDIT: Als Referenz hier ist meine Konfigurationsdatei:

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

Antwort

10

Es stellt sich heraus /sales/start={start}&end={end} ist kein gültiges Uri (duh!). Nach ein wenig Versuch und Irrtum habe ich es endlich herausgefunden. Das UriTemplate mit einem '?' Problem gelöst.

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

Danke für Ihre Hilfe!

+0

Ich verstehe nicht, warum es auf der Dev-Box funktionierte, aber nicht auf dem Server. Aber ich bin froh, dass du nicht blockiert bist! – Brian

+0

Ich entweder. Es funktioniert gut in VS mit dem falschen Uri. Seltsam, ich weiß ... –

4

Ich weiß, es ist wirklich spät, aber warum haben Sie nicht das folgende Format verwendet.

UriTemplate = "/sales/{start}/{end}" 
Verwandte Themen