0

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

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

当我应该选择 InstanceContextMode Single 或 PerCall 或 PerSession 时,我只需要深入了解?它基本上做什么?

简要告诉我何时打开 Single 会发生什么,或者在 PerCall 或 PerSession 的情况下会发生什么?Single 或 PerCall 或 PerSession 有什么区别

什么是默认 InstanceContextMode ?

4

1 回答 1

2

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

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

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

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

于 2013-01-03T15:41:59.643 回答