IIS应用程序池和缓存

IIS应用程序池和缓存,iis,caching,Iis,Caching,我已经创建了一个公共列表,可以从Web应用程序运行和访问该列表 private static List<x> _x; static readonly object lockObjx = new object(); public static void XCache() { if (_x != null) return; lock (lockObjx) {

我已经创建了一个公共列表,可以从Web应用程序运行和访问该列表

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

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

            lock (lockObjx)
            {
               _x = GetFromDatabase();
            }
}
私有静态列表x;
静态只读对象lockObjx=新对象();
公共静态void XCache()
{
如果(_x!=null)
返回;
锁(lockObjx)
{
_x=GetFromDatabase();
}
}

这一切都在默认应用程序池中愉快地运行。我现在需要添加一个web服务来更新这个缓存。我是否可以在默认应用程序池上运行此操作?如果没有,有没有一种方法可以做到这一点,而无需安装MEMCache之类的东西。服务和Wepp在同一台服务器上运行。

为了使其正常工作,您需要将服务与web应用程序放在同一个ASP.NET应用程序中。这通常意味着在IIS中的同一站点上运行它们

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


这里有一篇很好的文章:。它可能有点旧,但应该仍然有效。

缓存和会话特定于AppDomain(而不是应用程序池)

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

但是,有一种方法可以在同一应用程序池的不同应用程序之间共享缓存: