我们有一个运行的Windows服务,我们还有一个控制台应用程序,我们用它来配置这个服务,我们也有一个选项来查看记录的日志。
这个非常丑陋的事情是这个通信是由文本文件进行的,控制台应用程序写入文本文件,服务读取它,反之亦然。
你会用什么来进行这种交流? TCP / IP不是一个选项,因为控制台应用程序将仅用于本地运行服务。
Windows API SendMessage应该是要走的路?
谢谢!
答案 0 :(得分:6)
如果使用.net作为内置的这种东西并且相对容易使用,我会建议WCF作为Windows上所有通信的第一件事。由于您要排除TCP,我建议使用Named Pipes Binding。
还有一些Windows comms apis可用于机内通信。 Named Pipes(如上所述),MailSlots,Shared Memory (Memory Mapped files)等。
我的建议是使用命名管道使用WCF或原生。
答案 1 :(得分:1)
如果使用非阻塞的消息传递方法,则会降低死锁风险。 PostMessage
或SendNotifyMessage
优于SendMessage
,因为它们不会阻止来电者。
但是他们依赖于具有窗口句柄的服务。是吗?
您还可以使用WM_COPYDATA消息,传递的不只是wParam和lParam。如果将此消息与PostMessage一起使用,则需要注意在接收器完成之前不要释放内存。使用SendMessage for WM_COPYDATA是最安全的。
答案 2 :(得分:0)
共享内存?有关Codeproject的文章,请参阅here,这是同一网站上的另一篇fastipc文章。有一篇博客文章详细介绍了如何使用memory mapped file通过包装器进行共享。
希望这有帮助, 最好的祝福, 汤姆。