2009-09-09 25 views
7

Tôi có một dịch vụ REST trả về một đoạn lớn XML, có giá trị khoảng 150k.WCF REST Compression

ví dụ: http://xmlservice.com/services/RestService.svc/GetLargeXML

Vì vậy, tôi muốn nén phản hồi từ máy chủ, vì GZIP sẽ giảm mức độ này xuống một cái gì đó nhỏ hơn nhiều. Có tìm kiếm ở khắp mọi nơi tôi không thể cho cuộc sống của tôi tìm thấy một ví dụ về cách thực hiện nén cho các dịch vụ WCF REST. Cứu giúp!!

LƯU Ý: Dịch vụ của tôi được lưu trữ bởi bên thứ ba và tôi KHÔNG THỂ thực hiện việc này thông qua IIS vì nó không được chúng hỗ trợ.

Trả lời

-1

Dưới đây là một liên kết mà có thể phù hợp:

WS-Compression for WCF

Ít nhất, nó sẽ đưa bạn đi đúng hướng.

+2

Xin cảm ơn, nhưng tiếc là giải pháp WS (SOAP) chứ không phải REST (webHttp). – PhilJ

-2

Cách dễ nhất là sử dụng bộ lọc Nén PLJ ở phía trước servlet của bạn.

PJL Compression Filter

này trông cho Accept-Encoding Http Header để xác định xem khách hàng có thể chấp nhận một phản ứng nén. Về cơ bản nó chỉ kết thúc ServletOutputStream trong một GZipOutputStream hoặc DeflateerOutputStream - khá đơn giản và hữu ích.

+0

Đây là một dịch vụ WCF chạy trên IIS, do đó, một bộ lọc servlet J2EE rõ ràng không phải là một tùy chọn. – PhilJ

+0

Cái xấu của tôi, không có manh mối về WCF là gì - hình dung nó là một khung công tác Java khác. – Gandalf

6

Nó thực sự là khá dễ dàng để làm được điều này, ít nhất là với .NET 4.0 (tôi không thử nghiệm với 3.5). Những gì tôi làm là chỉ cho phép IIS 7 chăm sóc nó. Không cần tạo bộ lọc nén tùy chỉnh.

Trước tiên, hãy đảm bảo bạn đã cài đặt tính năng Nén động cho IIS 7. Sau đó, chọn máy chủ trong Trình quản lý IIS và sử dụng mô-đun nén để bật Nén động. Ngoài ra, bạn có thể thực hiện điều này từ dòng lệnh:

C:\windows\system32\inetsrv\appcmd set config -section:urlCompression /doDynamicCompression:true 

Tiếp theo, chỉnh sửa tệp sau. Bạn có thể phải tạo một bản sao của nó thay vì chỉnh sửa trực tiếp cấu hình (Notepad ++ phàn nàn với tôi), sau đó ghi đè lên bản gốc khi bạn đã sẵn sàng.

C:\Windows\System32\Inetsrv\Config\applicationHost.config 

Trong đó bạn sẽ tìm thấy một <dynamicTypes> phần dưới <httpCompression>. Dưới <dynamicTypes> bạn sẽ cần phải thêm tất cả các loại mime bạn muốn được nén khi khách hàng gửi tiêu đề gzip Accept-Encoding: gzip. Ví dụ:

<dynamicTypes> 
    <add mimeType="text/*" enabled="true" /> 
    <add mimeType="application/xml" enabled="true" /> 
    <add mimeType="application/json" enabled="true" /> 
    <add mimeType="message/*" enabled="true" /> 
    <add mimeType="application/x-javascript" enabled="true" /> 
    <add mimeType="*/*" enabled="false" /> 
</dynamicTypes> 

Khi bạn đã làm xong, hãy tái chế hồ bơi ứng dụng và bạn nên làm tốt. Nếu điều đó không hiệu quả, hãy thử khởi động lại máy chủ của bạn và đảm bảo rằng tính năng nén động được bật ở cấp ứng dụng cũng như cấp độ máy chủ.

Lưu ý: Theo một số bài đăng tôi đã đọc, đã từng là lỗi mà bạn phải chỉ định mã hóa ký tự (ví dụ: "application/json; charset = utf-8"). Tuy nhiên, tôi không có bất kỳ vấn đề gì.

+1

Điều tương tự có thể được thực hiện bằng cách sử dụng web.config, đó là thuận tiện hơn: http://codeasp.net/blogs/raghav_khunger/microsoft-net/1973/asp-net-enable-gzip-compression-via-web-config –

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