2011-12-12 26 views
5

JSON veri yapılarına hizmet veren bir WCF Rest Hizmeti projem var. WCF REST Hizmeti'nde JSON olmayan, XML dışı veriler döndürme

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

Şimdi WebService standart bir Web Sunucusu yaptığı gibi multimedya (resim, PDF belgeleri) belgelerini dönmek gerekiyor: Ben bir arayüz dosyası gibi bir sözleşme tanımladınız. ResponseFormat'un WCF WebMessageFormat sadece JSON veya XML'i destekler. Bir dosyayı döndürmek için arabirimdeki yöntemi nasıl tanımlarım?

şey gibi: Yani

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

o: Aşağıda gösterildiği gibi sizin RESTful servisinden bir dosya alabilirsiniz id 10.

+0

bunlara bir göz atın: http://stackoverflow.com/questions/2992095/attaching-files-to-wcf-rest-service-responses – pdiddy

+0

Teşekkürler pdiddy sorunu çözdü ve bazı ilginç ek bilgiler içeriyor. – Pierre

cevap

3

ile PDF dokümanı döndürür wget http://example.com/multimedia/10:

[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); 
     } 

IE'deki servise göz atarken, yanıt için açık bir kaydetme iletişim kutusu göstermelidir.

NOT: Hizmetinizin döndürdüğü dosyanın uygun içerik türünü ayarlamanız gerekir. Yukarıdaki örnekte bir metin dosyası döndürür.

+0

Teşekkürler. Bir metin dosyasının içerik türünün genellikle "text/plain" olduğunu unutmayın. – Pierre

+0

Ve sözleşme? –

İlgili konular