2009-03-02 18 views
8

Tôi đang xây dựng một dịch vụ WCF dựa trên đặc tả W3C xác định điểm cuối dịch vụ web RESTful chấp nhận dữ liệu bài đăng "application/x-www-form-urlencoded". WCF không hỗ trợ kiểu này mã hóa thông điệp theo mặc định và tôi đã tìm thấy một số ví dụ khác nhau của việc tạo ra một hợp đồng trông như thế này:Cách tốt nhất để hỗ trợ "dữ liệu bài đăng/ứng dụng-x-www-form-urlencoded" với WCF?

XElement Query_Post(Stream postData); 

Và sau đó trong việc thực hiện giải mã postData dòng bằng cách sử dụng phương pháp HttpUtility.ParseQueryString .

Có ai biết cách gõ mạnh mẽ hơn hỗ trợ "application/x-www-form-urlencoded" trong WCF không?

Tôi muốn hợp đồng hoạt động của tôi là:

XElement Query_Post(string query, string [] params); 
+3

Thực tế là 24 giờ sau đó không ai biết làm thế nào để làm những gì nên là một suy nghĩ cơ bản nên chỉ ra WCF không phải là nền tảng tốt nhất để xây dựng những thứ yên tĩnh. Hãy thử OpenRasta, tôi tin rằng nó có một bộ giải mã được tích hợp để xử lý dữ liệu x-www-form-urlencoded. –

Trả lời

7

Cách tốt nhất là sử dụng Stream như Raw HTTP POST with WCF hoặc những gì bạn đang nói. Lý do là vì WCF tóm tắt tất cả các công cụ bố cục vật lý ở mức giao tiếp từ mã dịch vụ. Lý tưởng nhất, bạn sẽ muốn tạo một dịch vụ có thể biến thành SOAP hoặc REST chỉ bằng cách lật công tắc.

Để hỗ trợ nguyên bản, bạn có thể phải mở rộng WebHttpBinding hoặc tự ràng buộc và triển khai custom encoder. Điều này là đối xứng với đầu ra như bài liên kết nói. Bạn phải xoay vòng tay của nó để có được WCF để xuất các công cụ không phải XML/JSON.

+0

Bạn có ví dụ về liên kết không chết không? –

2

thư viện Các WCF REST của contrib cho phép chức năng này:

https://github.com/mikeobrien/WcfRestContrib

Nó bao gồm một định dạng POX và hình thức url mã hóa định dạng và cho phép bạn dễ dàng tạo của riêng bạn. Các trình định dạng được ánh xạ tới các loại mime và tự động được chọn để tuần tự hóa/deserialize cơ quan thực thể dựa trên loại nội dung và chấp nhận các tiêu đề.

+0

Bị bỏ qua vì URL bị hỏng ... – ewitkows

+0

Câu trả lời đó là trưởng 6 tuổi. – hcoverlambda

+0

Và nó không cung cấp bất kỳ sự trợ giúp nào nữa – ewitkows

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