WCF中的默认InstanceContextMode



在WCF中,如果我们没有具体指定ServiceBehavior的InstanceContextMode,那么以下的默认模式是什么?

  1. PerCall
  2. PerSession
  3. 单个

谢谢。

关于它的文档谈到默认值是PerSession。但我相信它也取决于所使用的绑定(绑定支持会话吗),就像basichhttpbinding使用PerCall 一样

简单的答案是默认的实例化模式是PerSession

提供:

  • 您正在使用的会话类型支持会话
  • 请参阅[绑定类型会话支持](https://learn.microsoft.com/en-us/dotnet/framework/wcf/system-provided-bindings)
  • 如果通道没有创建会话,则行为就像它是PerCall
  • 服务合同允许会话-默认为";允许的"

以下是Microsoft提供的示例,代码中强制配置了默认值。默认行为示例

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

我发现阅读这篇微软文章(使用会话)中关于会话的内容,对于理解会话是如何打开和关闭的,以及它与实例化和并发之间的关系特别有启发性。

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

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

调用了构造函数。

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

当对象引用被销毁时,将调用析构函数。

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

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

相关内容

  • 没有找到相关文章

最新更新