WPF应用程序在向多个WCF服务(MVVM)发送/接收消息时锁定

我正在为我的应用程序的正确架构苦苦挣扎。特别是UI锁定问题,我不知道为什么。我有两个应用程序都运行需要相互通信的服务。 当以任何方式发送消息时,我每次都创建一个新的通道工厂。 客户端每15秒向服务器发送一次消息。在命令中,服务器将消息发送到客户端(一次一个)。从理论上讲,服务器可以不断地从多个客户端接收消息,因此需要像Web服务器一样扩展,同时仍然保持UI响应。 问题是一段时间后我的UI锁定了,有时在服务器上,有时在客户端上。我很确定这是由于WCF(还有很多其他的东西在继续)。 如果我尝试通过创建频道(通过channelfactory)发送消息,发送消息然后关闭频道工厂,则需要一分钟才能发送消息(同时两个应用程序上的UI都被锁定)。如果我在发送消息后离开
channelFactory.close()
,则会立即发送消息。 我创建的服务对于SendMessage方法有
[OperationContract(IsOneWay = true)]
。我的服务的实施有
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
。 为什么在最后使用channelFactory.close()时发送消息需要一分钟?     
已邀请:
在大多数情况下,您不应该在UI线程上通过网络发送消息。这是导致您的应用锁定的原因。我不明白为什么你的Web服务调用花了1分钟 - 可能只是UI线程正在排队等待消息。让我们先解决线程问题,看看是否能改善请求时间。 您不必担心接收消息,因为WCF将启动一个线程来接收和处理消息,但是当您发送消息时,线程将阻塞,直到消息被发送和确认。 要在非UI线程上发送消息,请使用任务并行库:
Task t = Task.Factory.StartNew(() =>
{
    //Do web service call here
});
如果您需要在发送消息后更新UI,请按照上面的代码执行以下操作:
Task UITask= t.ContinueWith(() =>
{
 this.TextBlock1.Text = "Complete"; 
}, TaskScheduler.FromCurrentSynchronizationContext());
    

要回复问题请先登录注册