2011-12-12 36 views
5

Tôi có một dự án WCF Rest Service được thiết lập để phục vụ các cơ sở dữ liệu JSON. Tôi đã xác định hợp đồng trong một tệp giao diện như:Trả về dữ liệu không phải JSON, không phải trong Dịch vụ REST WCF

[OperationContract] 
[WebInvoke(Method = "GET", 
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare, 
    UriTemplate = "location/{id}")] 
Location GetLocation(string id); 

Bây giờ WebService cần trả lại tài liệu đa phương tiện (hình ảnh, tài liệu PDF) như một máy chủ Web chuẩn. WCF WebMessageFormat của ResponseFormat chỉ hỗ trợ JSON hoặc XML. Làm cách nào để xác định phương thức trong giao diện để trả về một tệp?

Cái gì như:

[OperationContract] 
[WebInvoke(Method="GET", 
    ResponseFormat = ????? 
    BodyStyle = WebMessageBodyStyle.Bare, 
    UriTemplate = "multimedia/{id}")] 
???? GetMultimedia(string id); 

Vì vậy mà: wget http://example.com/multimedia/10 trả về tài liệu PDF với id 10

+0

hãy xem xét điều này: http://stackoverflow.com/questions/2992095/attaching-files-to-wcf-rest-service-responses – pdiddy

+0

Cảm ơn bạn đã giải quyết vấn đề và chứa một số thông tin bổ sung thú vị. – Pierre

Trả lời

3

Bạn có thể nhận được một tập tin từ dịch vụ RESTful của bạn như hình dưới đây:

[WebGet(UriTemplate = "file")] 
     public Stream GetFile() 
     { 
      WebOperationContext.Current.OutgoingResponse.ContentType = "application/txt"; 
      FileStream f = new FileStream("C:\\Test.txt", FileMode.Open); 
      int length = (int)f.Length; 
      WebOperationContext.Current.OutgoingResponse.ContentLength = length; 
      byte[] buffer = new byte[length]; 
      int sum = 0; 
      int count; 
      while((count = f.Read(buffer, sum , length - sum)) > 0) 
      { 
       sum += count; 
      } 
      f.Close(); 
      return new MemoryStream(buffer); 
     } 

Khi bạn duyệt đến dịch vụ trong IE, nó sẽ hiển thị hộp thoại lưu mở cho phản hồi.

LƯU Ý: Bạn nên đặt loại nội dung thích hợp của tệp mà dịch vụ của bạn trả về. Trong ví dụ trên, nó trả về một tệp văn bản.

+0

Cảm ơn bạn. Lưu ý loại nội dung cho tệp văn bản thường là "văn bản/đồng bằng". – Pierre

+0

Và hợp đồng? –

Các vấn đề liên quan