静态文件的IIS缓存未反映磁盘

时间:2018-05-10 19:06:33

标签: asp.net-mvc-4 iis-7.5

我们的Web应用程序使用ASP.NET MVC 4,在Windows Server 2008R2 Datacenter和IIS 7.5上运行。

我们有一个用于URL重写的自定义HttpModule。最终被重写的一些URL是在磁盘上提供静态文件,例如传入的URL(路径是假的但你得到它): /media/virtual/mystatic.html 被重新映射到: /iis/virtual/directory/mystatic.html

这些静态文件也可以由应用程序创建。例如,发出请求,并创建日志文件,并在带有202的响应中返回日志的URL。目的是让客户端能够在浏览器中打开日志文件,并刷新它以查看执行所请求任务时所取得的进展,并对服务器上的日志文件进行更新。

但我们看到的是日志文件在客户端上打开,而即使在服务器上更新,浏览器也会继续显示首次创建的文件,没有任何更新!

我们几个月来一直在努力解决这个问题,并且已经实施了以下措施来尝试解决这个问题

  • 在IIS中,我们编辑了Cache Control标头,选中了“Expire Web content”,并立即选中。这些请求的请求和响应标头显示Cache-Control:no-cache
  • 在IIS中,我们更新了输出缓存和UN检查了“启用缓存”和“启用内核缓存”
  • 我们使用HttpModule
  • 完全删除了ETag标头

问题发生时,我们注意到以下

  • RDP进入服务器,如果我们使用file:// URL在服务器上的浏览器中打开文件,将显示更新的版本。使用http:// URL在服务器上同一浏览器的另一个选项卡中打开它将显示(不正确缓存的)非更新版本!
  • 回收应用程序池将“刷新”文件并向所有客户端显示更新的版本

对于所有这些更新/注释,我似乎很确定缓存仍然发生在IIS级别。我们还能在这做什么?当我们写入文件时,有没有办法(在ASP.NET / C#中)强制IIS查看更新?是否存在我们遗漏的IIS缓存设置?

帮助。非常感谢你的时间。

0 个答案:

没有答案