在同一Windows窗体上运行WCF服务主机和WCF客户端代理

时间:2010-03-01 10:45:06

标签: .net wcf client-server

我们正在尝试构建连接客户端的“Web”,其中每个client.exe还提供远程客户端连接的服务主机。

这个想法是,只要远程客户端连接到本地客户端,就会使用表单直观地显示连接的远程客户端。每当新的远程客户端连接或断开连接时,表单都会从服务中进行更新。

但是,本地客户端也出于各种原因访问相同的表单(提供用户与远程客户端交互的方式)。

我的问题是:当客户端代理和服务主机访问表单时,我何时会遇到同步和线程问题? 该服务配置了ConcurrencyMode.Single和Session.Required。 客户端是单身人士。 我已经使用锁来同步对成员的访问,来自服务的回调也是线程安全的。还是会有死锁吗? 负载最小:最多2个客户端一次发送数据,客户端总数不超过25.基本上,应用程序将被使用,以便ONE(1)客户端可以与其他客户端通信。

注意:我承诺,在所有客户端都可以连接的专用计算机上也只能运行一个WCF服务。我仍然在询问这个特殊情况,每个客户端也提供服务主机。 感谢。

2 个答案:

答案 0 :(得分:1)

你没有回答自己的问题吗?

当然你会遇到同步问题。其中一些将通过WinForms控件只能从创建它们的线程访问这一事实来解决。您必须通过调用Control.Invoke或Control.BeginInvoke方法在该线程上完成所有UI工作。

另一方面,在与WCF代理相同的进程中托管WCF服务没有固有的问题。事实上,我最近能够编写一个单元测试,使用代理类来访问在单元测试中托管的模拟服务。

答案 1 :(得分:0)

只要有多个线程和锁,就会出现死锁,但它们是错误,而不是设计中的固有问题。

在特定情况下,请记住使用Invoke访问表单,因为只能在创建表单的线程中执行。