发送/接收消息到/从两个运行的应用程序

Ham*_*mid 9 c# message

我有两个名为SENDER和RECEIVER的应用程序.

RECEIVER将由SENDER以System.Diagnostics.Process.Start对象发布

RECEIVER将以隐藏模式启动,因此它没有MainWindowHandle.

然后我们无法使用Win32.WM_COPYDATA顺序发送消息给RECEIVER,因为它需要MainWindowHandle.

我需要的是通过任何方法定期发送和接收消息的能力.

我检查了以下链接的手册,MainWindowHandle但它没有帮助:

将消息发送到Windows进程(而不是其主窗口)

一个解决方案可能是一个有用的对象,System.Diagnostics.Process可以帮助我们将消息发送到进程.

Osc*_*ley 15

有两种方法可以在两个进程之间共享信息.

首先,你必须考虑当你的应用程序扩展时,两个进程是否总是在同一台机器上.

不同的机器

  • 使用TCP/UDP套接字连接(可以是最快的解决方案)
  • 使用MSMQ
  • 使用WebServices,WCF或Restful Web Service.
  • 从数据库中的公共条目读取.(不建议)
  • 命名管道(检查此项)(命名管道可以在同一台机器上或通过网络飞行)

永远在同一台机器上.

首选:MSMQ

如果我是你,我会保留在不同机器中使用进程的能力,因此我会像Maarten建议的那样使用两个使用MSMQ进行通信的Windows服务.为什么?

  1. MSMQ允许您不丢失消息(如果RECEIVER已关闭)
  2. MSMQ允许您在同一台机器或不同机器中进行处理
  3. Windows服务使您能够轻松启动/停止进程
  4. Windows服务可以监控我的SNMP,通常它们可以轻松地与Windows管理工具集成.

第二选择:Restful Web Service

如果您不想使用MSMQ,我将使用IIS中托管的两个Restful Web Service来传达这两个进程.如果你有一个场景,如果他们迟到,RECEIVER对来自SENDER的消息不感兴趣,那么它会非常有用.

  • 命名管道也可以在网络上使用。另请注意,WCF 可以由进程自托管,不需要 IIS。WCF 还允许同步通信。 (2认同)