我正在开发一个可在Linux,Mac和Windows上运行的Mono应用程序,并且需要应用程序(在单个操作系统上)才能相互发送简单的字符串消息.
具体来说,我想要一个单实例应用程序.如果尝试启动第二个实例,它将向已经运行的单个实例发送消息.
DBus已经出局了,因为我不希望这是一个额外的要求.套接字通信似乎很难,因为Windows似乎不允许连接权限.Mono似乎不支持内存映射文件.Mono似乎不支持命名管道.似乎在Mono上不支持IPC.
那么,是否有一种简单的方法可以将单个计算机上的字符串消息发送到适用于每个操作系统的服务器应用程序,而无需权限或其他依赖项?
在我的ubuntu(单声道版本10.10:2.6.7)上,我尝试使用WCF与BasicHttpBinding,NetTcpBinding和NetNamedPipeBinding进行进程间通信。前2个工作正常,对于NetNamedPipeBinding我收到一个错误:
不支持频道类型IDuplexSessionChannel
调用ChannelFactory.CreateChannel()方法时。
我还尝试将Remoting(自WCF推出以来就是一项旧技术)与IpcChannel结合使用;此msdn页上的示例已启动,并且在我的计算机上正常运行。
我想您在Windows上使用WCF或Remoting也不应该有问题,尽管不确定Mac,也没有要测试的东西。让我知道您是否需要任何代码示例。
希望这会有所帮助,问候
我在 mono-dev 邮件列表上写了相关内容。考虑了几种通用的进程间消息传递系统,包括 DBus、System.Threading.Mutex 类、WCF、Remoting、命名管道...结论基本上是mono 不支持 Mutex 类(适用于线程间,不适用于线程间)对于进程间)并且没有任何平台无关的可用。
我只能想象三种可能的解决方案。都有其缺点。也许有更好的解决方案可用,或者可能只是针对特定目的的更好的解决方案,或者可能存在一些跨平台的第三方库,您可以将其包含在您的应用程序中(我不知道。)但这些是我见过的最好的解决方案到目前为止能够找到:
| 归档时间: |
|
| 查看次数: |
7565 次 |
| 最近记录: |