我在ISS中運行MVC3網站。我們有一個從數據庫中獲取圖像的控制器。實際獲取的圖像是根據請求的主機名決定的,例如, http://hostA.site.com/image/23返回與http://hostB.site.com/image/23不同的圖像,即使這兩個網址都在IIS中引用相同的應用程序。在IIS和主機名中緩存ASP.NET
這工作正常,直到緩存啓用。我用下面的代碼,以使服務器和客戶端的緩存都:
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。如果使用它,你能看到並更改服務器緩存嗎? – Aristos 2012-04-20 12:12:24
緩存發生在服務器上(當我設置HttpCacheability.Public時),我使用wget驗證了這一點,它不會在本地進行緩存。一旦我設置HttpCacheability.Private IIS停止緩存。我不知道如何進入IIS的內部緩存,所以我不知道那裏發生了什麼。 – AVee 2012-04-23 12:30:58