并发线程无法访问WCF ConcurrentDictionary中的数据

时间:2018-08-03 03:46:47

标签: c# .net wcf concurrency

我在IIS上托管的WCF服务中遇到多个线程的问题。

  1. 该服务是通过将并发模式设置为“多个”并将实例上下文模式设置为“每个会话”来实现的。
  2. 内存中维护着一个静态ConcurrentDictionary,用于存储发布给传入客户端的会话令牌。

问题在于,有时线程只是找不到存储在此字典中的密钥,因此拒绝传入请求。

我已验证流程中没有未处理的异常。日志语句表明,当一个线程从另一个线程开始进行读操作时,如果一个线程将其写入字典,就会出现此问题。使用Visual Studio进行调试时,不会重现该问题。

我正在探索如何利用探查器工具来跟踪运行时行为。请建议是否还有另一种方法可以准确找出该词典中的数据变得不可用。

1 个答案:

答案 0 :(得分:0)

我曾将ConcurrentDictionary用于“多个” /“ PerCall”方案,但到目前为止,并发读写没有任何问题。

您是否有任何代码从ConcurrentDictionary中删除项目?将日志放在那里,检查它没有被调用。出错后检查您的ConcurrentDictionary项目计数。

我想您已经发现了其他可能性,例如,确保在首次访问之前添加了密钥,或者在两次访问之间没有重新启动服务主机(IIS)。