什么是默认实例上下文模式?

时间:2011-01-17 08:51:02

标签: wcf

如果我没有在服务中指定InstanceContextMode,那么默认的实例模式是什么?

3 个答案:

答案 0 :(得分:25)

这是PerSession

Link to MSDN doc

答案 1 :(得分:1)

简单的答案是默认的Instancing模式为PerSession

本发明提供:

以下是Microsoft提供的示例,其中默认情况下在代码中进行了配置。 Default behavior sample

[ServiceBehavior(  
AutomaticSessionShutdown=true,  
ConcurrencyMode=ConcurrencyMode.Single,  
InstanceContextMode=InstanceContextMode.PerSession,  
IncludeExceptionDetailInFaults=false,  
UseSynchronizationContext=true,  
ValidateMustUnderstand=true)]
public class CalculatorService : ICalculator { ... }

我在微软的这篇文章(Using Sessions)中发现了关于会话的阅读,特别是了解如何打开和关闭Sessions以及它与Instancing和Concurrency的关系。

默认情况下,WCF客户端将创建一个新会话,该会话将创建一个服务器实例,会话持续时间内的所有调用称为会话,并由单个线程服务器的单个实例(Instancing)提供服务(并发)专用于该会话/客户端/会话。

  

如果在WCF中使用默认的实例化行为,则WCF客户端对象之间的所有调用都由同一服务实例处理。因此,在应用程序级别,您可以将会话视为启用类似于本地调用行为的应用程序行为。例如,在创建本地对象时:

     

调用构造函数。

     

对WCF客户端对象引用的所有后续调用都由同一对象实例处理。

     

在销毁对象引用时调用析构函数。

     

只要使用默认服务实例行为,会话就会在客户端和服务之间启用类似的行为。

希望这可以帮助别人,因为我花了一些时间才找到答案。

答案 2 :(得分:0)

默认情况下,并非所有绑定都支持PerSession模式,例如支持basicHttpBinding模式的Percall