【问题标题】:IIS App Pool And CachingIIS 应用程序池和缓存
【发布时间】:2010-03-09 12:04:46
【问题描述】:

我创建了一个可以从我的 Web 应用程序运行和访问的公共列表。

private static List<x> _x;
static readonly object lockObjx = new object();

public static void XCache()
{
            if (_x != null)
                return;

            lock (lockObjx)
            {
               _x = GetFromDatabase();
            }
}

这一切都在默认应用程序池下愉快地运行。我现在需要添加一个可以更新此缓存的 Web 服务。我可以在默认应用程序池上运行吗?如果没有,我可以在不安装 MEMCache 之类的东西的情况下做到这一点。 Service 和 Wepp 在同一台服务器上运行。

【问题讨论】:

    标签: iis caching


    【解决方案1】:

    为了完成这项工作,您需要将该服务放在与 Web 应用程序相同的 ASP .NET 应用程序中。这通常意味着在 IIS 的同一个站点中运行它们。

    每个 ASP .NET 应用程序都有自己的 AppDomain。每个 AppDomain 都有自己的所有对象副本,包括静态引用。换句话说,数据不会在 AppDomain 之间共享,因此不会被 IIS 中的各个应用程序共享,即使它们运行在同一个 IIS 进程 (AppPool) 中也是如此。

    这里有一篇不错的文章:http://odetocode.com/Articles/305.aspx。它可能有点旧,但应该仍然有效。

    【讨论】:

      【解决方案2】:

      缓存和会话特定于 AppDomain(不是 App 池)。

      不同的 Web 应用程序总是有不同的应用程序域,即使它们在同一个应用程序池下运行。所以他们会有单独的缓存。

      但是,有一种方法可以在同一应用程序池的不同应用程序之间共享缓存:Shared variable across applications within the same AppPool?

      【讨论】:

        猜你喜欢
        • 2016-02-05
        • 2012-12-14
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 2010-10-19
        • 2012-06-19
        相关资源
        最近更新 更多