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