2010-03-11 36 views
5

Có thể cache phản hồi của trình xử lý http trên máy chủ và trên máy khách không?Caching phản hồi của máy chủ ASP.NET HTTP Handler và phía máy khách

này dường như không thể làm các trick:

_context.Response.Cache.SetCacheability (HttpCacheability.Public); _context.Response.Cache.SetExpires (DateTime.Now.AddDays (7));

_Context là HTTPContext được truyền làm đối số cho phương thức ProcessRequest khi triển khai IHttpHandler.

Bất kỳ ý tưởng nào?

Cập nhật: Máy khách lưu hình ảnh bộ nhớ cache được tải thông qua httphandler, nhưng nếu một khách hàng khác thực hiện cùng một cuộc gọi, máy chủ không lưu trữ được. Vì vậy, đối với mỗi khách hàng yêu cầu hình ảnh, máy chủ sẽ chuyển đến cơ sở dữ liệu (và luồng phim). Nếu chúng tôi sử dụng một trang aspx thay vì một httphandler cùng với một hồ sơ bộ nhớ đệm, sau đó các hình ảnh được lưu trữ cả trên máy khách và máy chủ.

+0

Bạn đã cố gắng sử dụng Fiddler để kiểm tra xem các tiêu đề có thực sự trong gói nhận được trên máy khách không? – Timores

+0

@Timores Máy khách lưu các cuộc gọi đến bộ xử lý, nhưng nếu một máy khách khác thực hiện cùng một cuộc gọi, máy chủ sẽ không lưu nó. –

Trả lời

3

Cảm ơn câu trả lời của bạn trong phần nhận xét.

Cache.SetCacheability được sử dụng để xác định liệu proxy hoặc ứng dụng khách có được lưu vào bộ đệm không, không phải trên máy chủ.

Hãy xem IIS 7 nơi giải thích cách lưu bộ nhớ cache của đầu ra của trình xử lý HTTP tại máy chủ.

+0

Thx, Timores, chúng tôi sẽ kiểm tra điều đó! Thật lạ lùng với một trang aspx bạn có thể cache ở cấp độ máy chủ, nhưng với một httplevel bạn cần thực hiện nó trong IIS (hoặc sẽ lưu các thay đổi trong web.config?) –

4

Với IIS7, điều này có thể được thực hiện trong web.config.

Ví dụ, giả sử url ashx của bạn là:

/ashxfiles/myhandler.ashx

... và bạn muốn thay đổi tùy theo params chuỗi truy vấn:

id , lang

Thêm thông tin sau vào web.confi của bạn g:

<location path="ashxfiles"> 
    <system.webServer> 
     <caching> 
      <profiles> 
       <add extension=".ashx" policy="CacheForTimePeriod" duration="00:00:10" varyByQueryString="id, lang" /> 
      </profiles> 
     </caching> 
    </system.webServer> 
</location> 

This rule applies to tất cả các file trong thư mục ashx, vì vậy bạn có thể muốn đặt file ashx của bạn trong các thư mục riêng biệt nếu bạn cần kiểm soát chặt chẽ hơn với các thiết lập bộ nhớ cache.

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