2009-02-12 87 views
7

我創建了以下RESTful WCF服務,在VS中運行它時工作得很好。爲什麼這個WCF服務不能識別UriTemplate參數?

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

然而,部署此我測試服務器(運行WIN2K3和IIS6)時,我收到以下服務器錯誤:

經營合同「ISalesService」使用GET,但也有身體GetSalesByDate「參數'開始'。 GET操作不能有一個主體。可以使參數'start'成爲UriTemplate參數,或者從WebGetAttribute切換到WebInvokeAttribute。

顯然我已經'開始'一個UriParameter。那麼誰能告訴我爲什麼拋出異常?

編輯: 作爲參考,這是我的配置文件:

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

回答

10

原來/sales/start={start}&end={end}是不是一個有效的URI(廢話!)。經過一些試驗和錯誤,我終於明白了這一點。用'?'調整UriTemplate解決了這個問題。

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

感謝您的幫助!

+0

我不明白它爲什麼在開發盒上工作,但不在服務器上。但我很高興你暢通無阻! – Brian 2009-02-13 04:52:39

4

我知道這確實很晚,但爲什麼不使用以下格式。

UriTemplate = "/sales/{start}/{end}" 
相關問題