2010-08-16 22 views
5

có thể là một cái gì đó tôi đang làm sai, nhưng tôi đang trả về XML từ dịch vụ WCF Rest của tôi được xây dựng với VS 2010. Trong fiddler bạn có thể thấy ở đây nó sẽ trả về thử nghiệm/html là content-typeWCF REST: xác định loại nội dung trên thuộc tính WebGet dường như không hoạt động

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Length: 222 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 16 Aug 2010 20:49:55 GMT 

vì vậy, tôi đã đi trước và bổ sung sau đây trên các thuộc tính WebGet trên phương pháp của tôi nhưng nó vẫn trả về text/html ... tôi đoán rằng tôi nên trả về nội dung loại văn bản/xml vì tôi thực sự trả về XML?

Heres phương pháp của tôi, tôi đã thêm các ResponseFormat vào thuộc tính ... Tôi đã không chắc chắn nếu tôi cần bodystyle (tôi không có ý tưởng những gì nó nhưng không thấy nó trong một ví dụ :-))

[WebGet(UriTemplate = "", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)] 
    public List<SampleItem> GetCollection() 
    { 
     // TODO: Replace the current implementation to return a collection of SampleItem instances 
     return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } }; 
    } 

dù sao sau khi thay đổi và xây dựng lại dự án, nó vẫn trả về loại nội dung sai ... tôi có bỏ lỡ mọi thứ không?

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Length: 222 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 16 Aug 2010 20:54:15 GMT 

EDIT

Ok tôi đã nhận một giải pháp làm việc nhưng phương pháp thuộc tính không có tác dụng, rất lạ ... nhưng nếu tôi đặt này

WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"; 

Bây giờ tôi kiểm tra cáy và loại nội dung thực sự là văn bản/xml.

Nhưng tôi cần phải đặt điều này trong mọi phương pháp và phương pháp thuộc tính dường như không có hiệu lực.

Bất kỳ ai biết tại sao?

+0

Tôi làm cho nó hoạt động, nhưng tôi không hiểu tại sao thuộc tính KHÔNG CÓ HIỆU QUẢ. Tôi sẽ cập nhật câu hỏi của tôi .. –

+0

Không chắc chắn nếu bạn vẫn còn quan tâm đến câu hỏi này (nó được một vài ngày), nhưng làm thế nào bạn yêu cầu dịch vụ này? jQuery, cái gì khác? Tôi nghĩ rằng bạn đang nhận được văn bản/html vì đó là những gì đang được gửi trong tiêu đề Chấp nhận của yêu cầu (hoặc ContentType). Bạn có thể cập nhật bằng cách bạn yêu cầu dịch vụ và những gì người dùng đang nói là tiêu đề yêu cầu của bạn không? Cảm ơn! –

+0

Hi D Hoerster, vâng tôi vẫn quan tâm ... Tôi đang làm một yêu cầu đơn giản bằng cách sử dụng firefox và tiêu đề của tôi được bao gồm trong câu hỏi trên .... Sao chép và dán từ fiddler. Cảm ơn –

Trả lời

0

Xem ví dụ:

WCF ResponseFormat For WebGet

Tôi nghĩ bạn muốn, ví dụ:

OutgoingWebResponseContext context = 
    WebOperationContext.Current.OutgoingResponse; 
context.ContentType = "image/jpeg"; 

ResponseFormat kiểm soát thứ khác.

+0

Xin chào Brian, cảm ơn ... tôi đã đọc nó và trừ khi tôi nhầm ... đây là khi bạn muốn trả về các định dạng CUSTOM không được hỗ trợ nhưng định dạng xml được hỗ trợ ..... xem tại đây http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webgetattribute.aspx Vì vậy, tôi cho rằng nó sẽ hoạt động nhưng không –

5

Theo this yêu cầu tiêu đề Firefox có một ưu tiên cao hơn cho text/html hơn text/xml, dẫn đến phương pháp dịch vụ WCF trang trí bằng xml hoặc json trở về với câu trả lời "sai", mặc dù tôi có thể tưởng tượng đó là hành vi đúng.

Bạn có thể buộc một kiểu nội dung trả lời bằng cách thiết lập một cách rõ ràng

WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"; 

hoặc tương đương. Tôi đoán đây là giải pháp thay thế duy nhất nếu bạn thực sự muốn buộc một phản hồi kiểu nội dung cụ thể cho tất cả các trình duyệt/khách hàng.

0

Cũ bưu điện, nhưng đây là những gì tôi tìm thấy trên MSDN của Blog Getting Started with WCF WebHttp Services in .NET 4:

dự án của bạn có sử dụng đầy đủ .NET 4 Framework, không phải là Client Profile.

Khi tôi đã làm điều đó và khởi động lại dự án, tôi có thể thêm System.ServiceModel.Web từ danh sách Tham khảo.

Tôi hy vọng điều này sẽ giúp ai đó.

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