繁体   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