【发布时间】:2012-05-02 00:32:02
【问题描述】:
我在 ISS 运行一个 MVC3 网站。我们有一个从数据库中获取图像的控制器。实际获取哪个图像取决于请求的主机名,例如http://hostA.site.com/image/23 返回与 http://hostB.site.com/image/23 不同的图像,即使两个 url 都引用 IIS 中的相同应用程序。
在启用缓存之前,这可以正常工作。我使用以下代码来允许在服务器和客户端上进行缓存:
Response.Cache.SetExpires(DateTime.Now.AddHours(1));
Response.Cache.SetCacheability(System.Web.HttpCacheability.Public);
这会导致 IIS 缓存响应,这正是我们想要看到的。然而,IIS 在缓存时似乎并没有区分不同的主机名。当我第一次获取http://hostA.site.com/image/23 时,对http://hostB.site.com/image/23 的后续调用会导致IIS 返回从前一个请求缓存的图像。我认为发生这种情况是因为 IIS 认为这些请求是相同的,因为它们具有相同的站点和相同的 URI。
有没有人知道一种无需为每个主机创建不同应用程序的方法来完成这项工作?我现在已经为 Private 设置了 Cacheability,但我真的很想让 IIS 缓存这些图像。
【问题讨论】:
-
您在此处放置的命令是针对客户端的。如果您将其缓存在代码后面,那么代码当然不知道提供了什么 url。如果你使用它,你能看到和改变服务器缓存吗?
-
缓存发生在服务器上(当我设置 HttpCacheability.Public 时),我使用 wget 验证了这一点,它不会在本地缓存。一旦我设置了 HttpCacheability.Private IIS 就会停止缓存。我不知道如何进入 IIS 的内部缓存,所以我不知道那里发生了什么。
标签: asp.net asp.net-mvc-3 iis caching