1

在WCF中,如果我们不具体指定ServiceBehaviour的InstanceContextMode,那么下面的默认模式是什么?

  1. 每次通话
  2. 每会话
  3. 单身的

谢谢。

4

2 回答 2

3

它上面的文档谈到默认值是PerSession. 但我相信它也取决于使用的绑定(是否绑定支持会话),如 basichttpbinding 使用PerCall

于 2013-02-07T12:23:49.997 回答
1

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

假如:

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

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

我发现在这篇 Microsoft 文章(Using Sessions)中阅读了有关 session 的内容,这对于理解 Sessions 如何打开和关闭以及这与实例化和并发之间的关系特别有启发性。

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

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

调用构造函数。

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

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

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

希望这对某人有所帮助,因为我花了一段时间才找到答案。

于 2018-06-19T06:27:27.007 回答