2010-03-11 120 views
5

是否可以缓存服务器和客户端上的http处理程序的响应?缓存ASP.NET HTTP处理程序服务器和客户端的响应

这似乎并没有做的伎俩:

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

_context是HTTPContext作为参数传递给IHttpHandler实现上的ProcessRequest方法。

任何想法?

更新:客户端缓存通过httphandler加载的图像,但是如果另一个客户端执行相同的调用,则服务器没有缓存它。因此,对于要求映像的每个客户端,服务器都会转到数据库(和文件流)。如果我们使用aspx页面而不是使用httphandler和缓存配置文件,则图像缓存在客户端和服务器上。

+0

您是否尝试过使用Fiddler来检查头部是否真的在客户端接收的数据包中? – Timores 2010-03-11 16:55:16

+0

@Timores客户端缓存对处理程序的调用,但如果另一个客户端执行相同的调用,服务器不会缓存它。 – 2010-03-11 17:17:16

回答

3

感谢您在评论中的回答。

Cache.SetCacheability用于定义是否允许代理或客户端缓存,而不是在服务器上。

看一看IIS 7,其中解释了如何在服务器上缓存HTTP处理程序的输出。

+0

Thx,Timores,我们会检查的!奇怪的是,使用aspx页面可以在服务器级别缓存,但是使用httplevel时,需要在IIS中执行此操作(或者iis会将更改保存在web.config中?) – 2010-03-11 22:08:07

4

对于IIS7,这可以在web.config中完成。

例如,假设您的ashx的网址是:

/ashxfiles/myhandler.ashx

...你想查询字符串PARAMS变化:

ID ,lang

将以下内容添加到您的web.confi 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> 

此规则适用于目录中的所有文件ashx的,所以你可能需要把你的ashx的文件在不同的文件夹,如果你需要的缓存设置更精细的控制。

相关问题