【发布时间】:2016-04-29 08:27:40
【问题描述】:
我目前正在开发一个即时通讯应用程序。一旦客户端连接到服务器并发送一条消息,它就可以正常工作。第二个客户端连接,两个客户端聊天,一切正常。当 2 个客户端同时发送消息时,问题就出现了。然后两个客户端都冻结(在调试中我得到一个超时),但在聊天中向其他客户端显示消息很好。
这是服务器的行为:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]
app.config 行为:
<behavior name="Behave">
<serviceThrottling maxConcurrentCalls="100"
maxConcurrentSessions="100"
maxConcurrentInstances="100" />
</behavior>
我是 WCF 的新手,我不确定我是否完全理解它。我试过改变周围的东西,但似乎没有任何帮助。任何形式的帮助将不胜感激。 如果需要更多代码,我会根据要求提供。
【问题讨论】:
-
你尝试改变 InstanceContextMode = InstanceContextMode.PerCall 吗??
-
@NadeemKhoury 我已经尝试过了,但我需要使用单例。如果我使用 PerCall 或 PerSession,取决于两者中的哪一个,那么我的应用程序就会搞砸。发生的情况是,这 2 个客户端(或任何其他客户端)将无法聊天,因为为每个客户端创建了一个新对象。他们能够发送消息,即使他们中的任何一个都不会被另一个看到。我不确定我的解释是否足以让您理解应用程序的行为,如果不是,请告诉我。
-
检查一切。这只是冻结 2 个客户端的 UI。就是这样。我认为问题在于同步。