2011-06-16 79 views
0

我有以下情形:WCF消息本地和互联网

有一个主服务,这在轮询的方式读取其它数据服务和/或数据库。当新工作变得可用时,它指示“奴隶”服务创建一个新进程(不是线程!)来处理该特定作业,并存储新进程的标识符。然后,如果有关该作业的新命令出现,它必须向该特定进程发送消息(队列?)。
为了使它更加复杂,“奴隶”服务可能与主服务在同一台服务器上,也可能不在同一台服务器上,并且创建的进程与创建进程的服务器位于同一台服务器上。
我正在寻找与主人进程进行通信(单纯回复)的最佳方式。

  • 如果我必须通过奴隶发送消息给进程是可以接受的。
  • 这是preferrable如果我必须用同样的方法,以达到局部过程的远程过程

我的首选工具是WCF,但我没有使用任何复杂得多WsDualHttpBinding ...
我有什么选择?可靠的会话?消息队列?
有什么约束力? NetTcpBinding,NetMsmqBinding,NamedPipes?

+0

这些进程是否可以公开IPC WCF端点(只能在运行它们的计算机上访问)或者他们相对任意的过程没有特殊的属性? – 2011-06-16 17:35:58

+0

@Richard Blewett:他们可以,但那时与他们沟通的唯一方法就是通过奴隶。 (这本身不是问题)我如何指定和端点为IPC? – TDaver 2011-06-16 17:54:08

+1

您可以使用NetNamedPipeBinding,它使用名为管道 – 2011-06-16 18:26:49

回答

1

我会让每个已启动的进程公开一个使用NetNamedPipeBinding公开的“过程控制”WCF服务(它不允许在机器外进行交互)。然后通过本地的Slaver服务来控制每一个。这意味着无论进程是本地还是远程,并且您拥有WCF的标准通信技术,您都拥有通用的通信模型。WCF

+0

的共享内存,这与我在进行其他研究后得出的大致相同。另外:在主人和奴隶之间什么是最好的东西?我认为NetTcpBinding,对吧? – TDaver 2011-06-16 23:02:46

+0

如果你需要双工,那么肯定NetTcpBinding,但否则我会试图保持与HTTP - BasicHttpBinding或通过HTTP二进制编码的自定义绑定。 NetTcpBinding本质上是会话式的,需要一定程度的特殊处理http://www.dotnetconsult.co.uk/weblog2/PermaLink,guid,af6e6325-2e30-42e3-acb9-57e1363fa51e.aspx – 2011-06-17 05:37:28