【问题标题】:Asp.net static object behaviourAsp.net 静态对象行为
【发布时间】:2010-05-04 20:38:28
【问题描述】:

我有以下类作为 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,这是意料之外的。

提前谢谢你

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    这将得到一个新的GuidAppDomain;无论何时,您都会有新的AppDomains:

    • 应用程序池回收
    • 不同的机器
    • 你重启服务器
    • 您编辑了诸如 web.config 之类的文件
    • IIS 感觉就像产生另一个

    简而言之,这并不是证明一个应用相同的一种非常可靠的方法(尽管它清楚地表明不同应用)。

    为什么不直接使用站点路径或 IIS 名称作为标识符?

    【讨论】:

    • 我明白这一点。我 99% 确定没有应用程序池回收、服务器重启、Web 配置摆弄。这留下了不同的机器(我不明白你的意思)和 IIS(我对此无能为力)。至于您的建议,我发布的课程是作为 dll 包含在 asp.net 应用程序中的项目的一部分,因此我认为我无法访问这两者中的任何一个。除非我弄错了……
    • 我的意思是“不同的机器”——一个网络农场;多个服务器假装是一个。但我认为罪魁祸首是 IIS 想要一个新的AppDomain - 你对此无能为力。
    【解决方案2】:

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

    在过渡期间,两个 AppDomain 仍将运行。

    【讨论】:

      【解决方案3】:

      在 Marc 发表评论后,我最终在应用程序启动时使用了它,这似乎有效

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 2011-03-11
        • 2013-12-18
        • 2010-09-23
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        相关资源
        最近更新 更多