2009-02-12 29 views
7

Tôi đã tạo dịch vụ RESTful WCF sau, hoạt động tốt khi chạy nó trong VS.Tại sao dịch vụ WCF này không nhận ra tham số UriTemplate?

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

Tuy nhiên, khi triển khai này đến máy chủ thử nghiệm của tôi (chạy Win2K3 và IIS6) tôi nhận được lỗi máy chủ sau:

Operation 'GetSalesByDate' trong hợp đồng sử dụng 'ISalesService' GET, mà còn có cơ thể tham số 'bắt đầu'. Hoạt động GET không thể có thân. Hoặc là làm cho tham số 'bắt đầu' một tham số UriTemplate, hoặc chuyển từ WebGetAttribute sang WebInvokeAttribute.

Rõ ràng là tôi đã thực hiện 'bắt đầu' tham số UriParameter. Vì vậy, bất cứ ai có thể cho tôi biết lý do tại sao một ngoại lệ đang được ném?

EDIT: Để tham khảo, đây là tập tin cấu hình của tôi:

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

Trả lời

10

Hóa ra /sales/start={start}&end={end} không phải là một Uri hợp lệ (duh!). Sau một chút thử và sai lầm, cuối cùng tôi đã tìm ra điều này. Tinh chỉnh UriTemplate bằng dấu '?' Đã giải quyết vấn đề.

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

Cảm ơn sự giúp đỡ của bạn!

+0

Tôi không hiểu tại sao nó hoạt động trên hộp dev, nhưng không phải trên máy chủ. Nhưng tôi rất vui khi bạn được bỏ chặn! – Brian

+0

Tôi. Nó hoạt động tốt trong VS với Uri không chính xác. Lạ thật, tôi biết ... –

4

Tôi biết nó thực sự là muộn nhưng tại sao bạn không sử dụng định dạng sau.

UriTemplate = "/sales/{start}/{end}" 
Các vấn đề liên quan