IIS 应用程序池和缓存

Chr*_*s G 3 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();
            }
}
Run Code Online (Sandbox Code Playgroud)

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

dri*_*iis 5

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

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

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