2010-05-04 91 views
2

我有以下類作爲asp.net應用程序的一部分。Asp.net靜態對象行爲

public sealed class SomeClass  
{ 
    private static string appId = Guid.NewGuid().ToString(); 

    public static ReadSomethingFromDb(){} 

    public static WriteSomethingToDb(){} 
} 

在同一應用程序池中有多個應用程序實例,它們都訪問同一個數據庫。我希望上面的類執行的操作與執行它的實例唯一綁定,因此使用了appId。因此,向數據庫添加記錄會包含名稱,地址和appId。爲了討論的目的,這已經被簡化了。

假設我有兩個運行在mysite.a和mysite.b的實例,上面的類將生成兩個不同的GUID。

我的問題是,mysite.a有時產生多個GUID,這是意想不到的。

預先感謝您

回答

3

這將讓每AppDomainGuid;你就會有新的AppDomain小號每當:

  • 的應用程序池回收
  • 不同的機器
  • 您重新啓動服務器
  • 您編輯文件,如web.config中
  • IIS 剛感覺像產卵另一個

總之,這是不是一個非常強大的省g一個應用程序是相同(儘管它明確指示不同應用程序)。

爲什麼不只是像站點路徑或IIS名稱作爲標識符?

+0

我明白這一點。我99%肯定沒有應用程序池回收,服務器重新啓動,Web配置擺弄。這留下了不同的機器(我不明白你的意思)和IIS(我對此無能爲力)。 至於你的建議,我發佈的類是一個項目的一部分,作爲一個DLL包含在asp.net應用程序中,所以我認爲我無法訪問這兩者中的任何一個。除非我錯了...... – 2010-05-04 11:25:53

+0

「不同的機器」我的意思是 - 一個網絡農場;假裝成一個的多個服務器。但我期望這裏的罪魁禍首是IIS想要一個新的'AppDomain' - 你不能做太多的事情。 – 2010-05-04 11:40:24

2

在各種情況下都會創建一個新的AppDomain。例如,當web.config改變時。那時,原始AppDomain沒有計劃新的請求;並且所有新的請求都被髮送到新的請求。

在轉換過程中,兩個AppDomain仍將繼續運行。

1

後,Marc的評論我結束了在這似乎工作

string applicationId = Environment.MachineName+"" 
    +System.Web.HttpContext.Current.Request.ApplicationPath; 

這個覆蓋我爲有一個多機器設置以及取決於路徑上的應用程序實例的機會應用開始利用這一點。