原始问题变得多余,因为它基于错误的假设,因此编辑它以提供有关Sessions, Instancing and Concurrency的一些信息以及下面接受的答案。
答案 0 :(得分:1)
各种托管类型通常是相同的:IIS,Windows服务,WCF。
ASP.net实现如何在内部工作,使用什么机制隔离静态变量而不为每个服务调用创建新的AppDomain。
有一篇很好的Code Project文章解释了高级别的差异,如果你想看看底层,你应该使用像ILSpy或Reflector这样的Decompiler来查看实现细节。 实现的差异将是每个请求或每个会话对象单例,实例化或池化的方式。
以下是代码项目文章的摘录:Three ways to do WCF instance management
要设置PerCall InstanceContext,请使用ServiceBehaviour属性:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
以下是服务行为属性的源代码:
特别是在建立instanceModeContext Provider的地方:
dispatch.InstanceContextProvider = InstanceContextProviderBase.GetProviderForMode(this.instanceMode, dispatch);
if ((this.instanceMode == InstanceContextMode.Single) &&
(dispatch.SingletonInstanceContext == null))
{
if (singleton == null)
{
if (this.wellKnownSingleton != null)
{
singleton = new InstanceContext(serviceHostBase, this.wellKnownSingleton, true, false);
}
else if (this.hiddenSingleton != null)
{
singleton = new InstanceContext(serviceHostBase, this.hiddenSingleton, false, false);
}
else
{
singleton = new InstanceContext(serviceHostBase, false);
}
singleton.AutoClose = false;
}
dispatch.SingletonInstanceContext = singleton;
}
所以你可以看到区别在于wellKnownSingleton,hiddenSingleton或者两者之间的切换,这是对象单独,实例化或合并的实现方式。
您可以浏览代码库并查看channelDispatcher
代码,以查看有关实现细节的更多信息。