【问题标题】:WCF Multiple ClientsWCF 多客户端
【发布时间】: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。就是这样。我认为问题在于同步。

标签: c# wcf server client


【解决方案1】:

我认为你应该调用后台线程,而不是同一个线程。 这是交易:

  1. 你应该定义private SynchronizationContext _SyncContext;

2.and 在构造函数中:

_SyncContext = SynchronizationContext .Current; 

3。并在您的客户端在方法事件处理程序中添加此代码。

Thread thread = new Thread(()=>
{

    SendOrPostCallBack callback = new SendOrPostCallback(arg=>
    {


    ** your logic here need to be marshalled**
    }

    _SyncContext.Send(callback, null); 
}

告诉我它是否对你有用,兄弟。快乐编码。

【讨论】:

  • 这已经足够接近让我大致了解出了什么问题。在我的客户端内部,我在向服务器发送请求时使用 Task 运行了一个异步操作,它解决了我的问题。我根本不需要实现 SynchronizationContext。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多