【问题标题】:ASP.NET Global/Static storage?ASP.NET 全局/静态存储?
【发布时间】:2011-04-12 16:11:18
【问题描述】:

我有一个线程安全对象,它是以前在 Windows 服务/客户端场景中使用的 API 的一部分。这个线程安全的对象本质上是一个单例,并存储在一个静态变量中,以便所有调用者都可以访问相同的状态。

此 API 最近开始在 ASP.NET 应用程序中使用,我怀疑我们看到的一些奇怪行为可能是由于意外的 AppDomain/生命周期行为。所以我想知道我是否可以得到一些验证:

对于所有请求是否可靠地使用静态变量,或者 ASP.NET 是否会为多个请求使用多个 AppDomain 做任何诡计?

我知道网络花园就是这种情况......但我们的 IIS 配置为仅使用 1 个进程,并且配置为每天仅回收一次

【问题讨论】:

    标签: asp.net static request appdomain


    【解决方案1】:

    对于 1 个工作进程中的所有请求,静态变量应该相同。我建议您将日志添加到您的 asp.net 应用程序,尤其是在 application_start/stop 和单例的静态构造函数中,以查看发生了什么。 希望这可以帮助。

    【讨论】:

    • 好的,这就是我的想法,但想再次验证我的假设。谢谢!
    • 这个答案不正确。在 .NET 中,静态变量的范围是 AppDomain,而不是进程。一个 ASP.NET 工作进程可以托管多个 AppDomain。
    • @richb,你有理由在真正的 ASP.NET 应用程序中这样做吗?
    • Kirill 如果您在 IIS 上使用同一个工作进程定义了多个应用程序,则每个应用程序都有自己的 AppDomain。您可以将每个应用程序分配给不同的工作进程,但不这样做是完全有效的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多