2010-03-09 161 views
1

我創建了一個運行的公共列表,可以從我的Web應用程序訪問它。IIS應用程序池和緩存

private static List<x> _x; 
static readonly object lockObjx = new object(); 

public static void XCache() 
{ 
      if (_x != null) 
       return; 

      lock (lockObjx) 
      { 
       _x = GetFromDatabase(); 
      } 
} 

這一切都在默認應用程序池下愉快地運行。我現在需要添加一個可以更新此緩存的Web服務。我可以在默認的應用程序池上運行嗎?如果沒有,我可以做到這一點,而不需要安裝像MEMCache這樣的東西。 Service和Wepp在同一臺服務器上運行。

回答

3

爲了做到這一點,您需要將該服務放在與Web應用程序相同的ASP .NET應用程序中。這通常意味着在IIS中的同一站點上運行它們。

每個ASP .NET應用程序都有它自己的AppDomain。每個AppDomain都有它自己的所有對象的副本,包括靜態引用。換句話說,數據不會在AppDomain之間共享,因此即使它們在同一個IIS進程(AppPool)中運行,也不會被IIS中的單個應用程序共享。

這裏有一篇很好的文章:http://odetocode.com/Articles/305.aspx。它可能有點舊,但它應該仍然有效。