2012-11-02 14 views
1

我正在設計和PubSub系統與WCF(用於學習的目的)使用netTcpBinding和雙工通信。在我的出版商ServiceContract中,我有一個需要在所有會話之間共享的字典,並列出我需要特定於會話。WCF InstanceContext單個或InstanceContext與靜態成員的PerSession

這種情況下最好的選擇是什麼?

  1. InstanceContext.PerSession - 以字典爲靜態成員,並 列表作爲私有成員
  2. InstanceContextMode.Single - 字典作爲 私人,列表將轉移到字典(鍵 - 用戶,價值 - 用戶的列表)

另一個問題我有,我從的NodeJS/EventMachine的正在添加的背景,我想也不是什麼將更多的性能,明智的˚F或這種服務 - ConcurrenyMode。 多個或ConcurrencyMode。 Reentrant

回答

1

首先 - ConcurrencyMode.Reentrant是單線程所以會在鎖結束,你最好與ConcurrencyMode.Multiple(前提是你已經採取了你的代碼中necassary措施防止通常線程問題)

關於你的instancecontextmode - 我會相信你在PerSession中比在你描述的場景中使用Single更好。

這有助於有點太 - http://msdn.microsoft.com/en-us/library/system.servicemodel.concurrencymode.aspx

+0

嗨克里斯感謝,關於InstanceContextMode.PerSession你知不知道是否有與設置「靜態」成員的問題?和關於多個 - 而不是設置鎖訪問我的字典/列表中的每一處我​​可以使用ConcurrentDictionary和ConcurrentBag並將這些鎖保存在我的代碼? – Yosi