Asp.net静态对象行为

时间:2010-05-04 11:05:31

标签: c# 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 个答案:

答案 0 :(得分:3)

Guid个新AppDomain;无论何时,你都会有新的AppDomain

  • app-pool recycles
  • 不同的机器
  • 重启服务器
  • 您编辑了一个文件,例如web.config
  • IIS 只是感觉产生另一个

简而言之,这不是一种非常强大的方式来证明一个应用程序相同(尽管它明确表示不同的应用程序)。

为什么不将网站路径或IIS名称作为标识符?

答案 1 :(得分:2)

在各种情况下创建新的AppDomain。例如,更改web.config时。那时,没有为原始AppDomain安排新的请求;并且所有新请求都将发送给新请求。

在转换期间,两个AppDomain仍将继续运行。

答案 2 :(得分:1)

在Marc的评论之后,我最终在应用程序启动时使用了这个似乎正常工作

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

这涵盖了我,因为有可能进行多机器设置以及取决于路径的应用程序实例。