2008-10-28 25 views
12

Tôi đã bật tính năng nén trong IIS7 và nó hoạt động như mong đợi trên tất cả các phản hồi ngoại trừ những phản hồi được tạo bởi ASP.NET AJAX. Tôi có một dịch vụ web cung cấp dữ liệu cho khách hàng. Khi dịch vụ web được gọi trực tiếp, nó được nén đúng cách. Tuy nhiên, khi nó được gọi thông qua ASP.NET AJAX, phản hồi JSON không được nén.Làm thế nào tôi có thể nhận được ASP.NET AJAX để gửi phản ứng JSON của nó với nén GZip?

Làm thế nào tôi có thể nhận được AJAX ASP.NET để gửi phản hồi JSON bằng tính năng nén GZip?

Trả lời

1

Bạn đang sử dụng trình duyệt nào? Có một lỗi trong IE 6 gây ra lỗi trong nén. Vì vậy, ASP.NET AJAX tắt nén để IE 6 trình duyệt:

http://weblogs.asp.net/scottgu/archive/2005/06/28/416185.aspx

Ngoài ra, bạn kích hoạt tính năng nén các tập tin ASMX?

+0

Làm cách nào chúng tôi có thể bật tính năng nén cho tệp ASMX? Bất kỳ tài liệu tham khảo? – Lijo

0

ngoái, tôi đã kiểm tra, gzipping là cái gì mà IIS không (khi thiết lập một cách chính xác) - và tất nhiên khi trình duyệt sẽ gửi các tiêu đề cần

5

IIS7 sử dụng nội dung mã hóa để quyết định xem có nên nén các phản ứng (giả sử tất nhiên là trình duyệt có thể chấp nhận gzip). Chúng được đặt trong applicationHost.config, và theo mặc định danh sách là

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

Nếu bạn gọi dịch vụ web trực tiếp, phản ứng XML có một content-type của text/xml, mà được nén. Khi được AJAX gọi, phản hồi JSON có loại nội dung là application/json, vì vậy nó không bị nén. Thêm những điều sau đây vào applicationHost.config sẽ khắc phục điều đó ...

 <add mimeType="application/json" enabled="true" /> 
+0

Làm thế nào chúng ta có thể làm điều đó trong IIS6? – Lijo

+0

Tham khảo: http://stackoverflow.com/questions/2515421/how-to-compress-json-with- – Lijo

+0

Và [Tùy chỉnh loại tệp IIS nén (IIS 6.0)] (http://www.microsoft.com/ technet/prodtechnol/WindowsServer2003/Library/IIS/5bce429d-c4a7-4f9e-a619-5972497b932a.mspx? mfr = true) – Lijo

0

Nói chung bạn không muốn làm điều này trừ khi bạn không ngại ném đơn đặt hàng của magnitudes lượng điện máy chủ vào ứng dụng của bạn .. .

Ngoài ra không chỉ máy chủ CPU mà còn client-CPU trở thành một vấn đề khi bạn làm điều này ....

này kết thúc với rằng ứng dụng của bạn trở nên chậm hơn CÁCH nếu bạn gzip tất cả Responses Ajax của bạn ... !

+0

Sự nhấn mạnh phía khách hàng là rất quan trọng cần lưu ý. Ngoài ra, hãy chú ý khi nào nên nén và khi nào thì không. Trong thực tế, có những lúc nén thực sự làm cho đối tượng lớn hơn trước khi giải nén. Sử dụng MVC, nó có thể được thực hiện trong bất kỳ ứng dụng ASP.NET nào, tôi đã tạo ra một sự kết hợp cho các hành động điều khiển của tôi bằng cách tạo ra một lớp kế thừa từ ActionFilterAttribute. Trong lớp tôi kéo tiêu đề mã hóa chấp nhận, filterContext.HttpContext.Request.Headers ["Accept-Encoding"], và kiểm tra deflate hoặc gzip. Nếu chúng có mặt và đáp ứng các điều kiện kinh doanh cụ thể của tôi, tôi làm lệch hướng hoặc GZipStream. –

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