IIS应用程序池和缓存

时间:2010-03-09 12:04:46

标签: iis caching

我创建了一个运行的公共列表,可以从我的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在同一台服务器上运行。

2 个答案:

答案 0 :(得分:3)

为了实现这一目标,您需要将服务放在与Web应用程序相同的ASP .NET应用程序中。这通常意味着在IIS中的同一站点中运行它们。

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

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

答案 1 :(得分:0)

缓存和会话特定于AppDomain(非应用程序池)。

不同的Web应用程序将始终具有不同的App Domains,即使它们在同一应用程序池下运行。因此它们将具有单独的缓存。

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