簡體   English   中英

ASP.NET靜態對象行為

[英]Asp.net static object behaviour

我將以下課程作為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上運行,則上述類將生成兩個不同的向導。

我的問題是mysite.a有時會產生多個GUID,這是意外的。

先感謝您

這將為每個AppDomain獲取一個新的Guid 每當出現以下情況,您將擁有新的AppDomain

  • 應用程序池回收
  • 不同的機器
  • 您重新啟動服務器
  • 您編輯諸如web.config之類的文件
  • IIS 就像生成另一個

簡而言之,這不是證明一個應用程序相同的非常健壯的方法(盡管它清楚地表明了不同的應用程序)。

為什么不只將站點路徑或IIS名稱之類的內容用作標識符?

在各種情況下都會創建一個新的AppDomain。 例如,當web.config更改時。 當時,沒有為原始AppDomain安排新的請求; 並將所有新請求發送到新請求。

在過渡期間,兩個AppDomain仍將運行。

在Marc發表評論后,我最終在應用程序啟動時使用了它,這似乎可行

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

這涵蓋了我,因為有可能會設置多台計算機以及取決於路徑的應用程序實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM