带有静态成员的WCF InstanceContext Single或InstanceContext PerSession

时间:2012-11-02 13:33:53

标签: c# .net wcf nettcpbinding

我正在使用netTcpBinding和Duplex Communication设计和使用WCF(用于学习目的)的PubSub系统。在我的发布者ServiceContract中,我有一个字典,我需要在所有sesions之间共享,并列出我需要特定于会话的列表。

这种情况的最佳选择是什么?

  1. InstanceContext.PerSession - 将字典作为静态成员,和 列为私人会员
  2. InstanceContextMode.Single - 字典为 private,list将转移到字典(key -user,value - 用户名单)
  3. 我遇到的另一个问题是,我是从NodeJS / EventMachine背景出来的,我想不要为这种服务提供更好的性能 - ConcurrenyMode。 Multiple 或ConcurrencyMode。 可重入

1 个答案:

答案 0 :(得分:1)

首先 - ConcurrencyMode.Reentrant是单线程的,因此会以锁定结束,你最好使用ConcurrencyMode.Multiple(假设你已经采取了代码中的必要步骤来防止通常的线程问题)

关于你的instancecontextmode - 在你所描述的场景中,我相信你的PerSession比Single更好。

这也有点帮助 - http://msdn.microsoft.com/en-us/library/system.servicemodel.concurrencymode.aspx