会话频道是如何真正工作的

本文关键字:工作 何真正 频道 会话 | 更新日期: 2023-09-27 18:36:37

我未能从这篇 MSDN 文章中一遍又一遍地理解我们为什么要使用它以及它是如何工作的:

  1. 带会话的数据报
  2. 会话的请求-响应
  3. 带会话的双工

假设我有一个服务

InstanceContextMode = InstanceContextMode.PerSession
ConcurrencyMode=ConcurrencyMode.Single

如果我有 2 个客户端用于此服务,并且它们同时激活该集合中的方法,为什么其中一个要等到服务完成另一个请求?PerSession + 2 个客户端 = "2"个服务,每个客户端都有 ConcurrencyMode.Single。我的错误在哪里?

会话频道是如何真正工作的

至于您问题的 B 部分,这里有一系列关于 WCF 实例化、并发和限制的优秀文章:

  • 第 1 部分(实例化)
  • 第 2 部分(并发)
  • 第 3 部分(限制)

更新

检查服务上每个客户端调用的实例上下文 ID、会话 ID 和线程 ID,并首先验证它们是否不同。

要检查实例上下文 ID,请执行以下操作:

OperationContext.Current.InstanceContext.GetHashCode()

要检查会话 ID,请执行以下操作:

OperationContext.Current.SessionId

要检查线程 ID,请执行以下操作:

Thread.CurrentThread.ManagedThreadId

如果每个客户都不同,那么我无法解释您遇到的问题。