关于WCF InstanceContextMode

时间:2013-01-03 10:19:49

标签: wcf

我是WCF的新手。经常注视wcf代码&文章。在查看了许多代码之后,我经常坚持使用非常基本的东西,并且没有对下面的问题进行详细的讨论。所以这里是我的几个基本问​​题....并寻找详细讨论样本情况和示例代码。

什么是InstanceContextMode? 很多人使用InstanceContextMode Single或PerCall或PerSession?

我需要深入了解何时应该使用InstanceContextMode Single或PerCall或PerSession?它基本上做了什么??

简要告诉我,当我打开单身时会发生什么事情或者PerCall或PerSession会发生什么? Single或PerCall或PerSession之间有什么区别

什么是默认的InstanceContextMode?

1 个答案:

答案 0 :(得分:2)

InstanceContextMode属性指示WCF将如何创建服务类的实例以及这些实例是否将在请求之间重用。

  • PerSession :(默认情况下)将为每个WCF会话创建一个服务实例,用于支持会话的通道(否则,行为与PerCall相同);如果您在每个客户端会话的服务类中维护状态,则此值很有用
  • PerCall :将为客户端的每个WCF操作(方法调用)创建服务类的新实例
  • 单个:在主机进程中只会创建一个服务实例,它将为所有传入请求提供服务;除非服务的ConcurrencyMode行为设置为Multiple,否则所有呼叫都将被序列化为服务。

对于高容量无状态服务,使用SingleConcurrencyMode.Multiple可以减少分配的服务实例数以及垃圾收集器的相关压力。但是,WCF不要求/假设您的服务是无状态的,这就是默认PerSession的原因。

您可以通过在服务的默认构造函数中设置断点来验证不同实例上下文模式的行为。