我知道IPC,并在几个项目中使用过它。我的新要求包括两个简单的C#应用程序,需要交换短消息,如“执行此操作”“完成”。这应该是双向的。
这将在旧系统(Win Xp .Net 3.5)上运行,但无法配置它们。最终用户只需运行该应用程序。
有没有一种简单的方法在C#应用程序之间交换数据?
答案 0 :(得分:1)
你有几个选择:
wcf,你说你已经考虑过并拒绝了;我可以询问是什么让你拒绝它吗?
如你所说,命名管道;将两个命名管道包装成双向消息传递系统实际上是微不足道的(专业提示:使其处于一次性状态并清理管道中的管道,以免将其锁定)
排队系统,但通常您会在多对多或一对多渠道中看到这些
序列化消息队列(简单队列结构)并将其放入内存映射文件,然后从任意一侧读/写
深奥:使用Windows消息,即pinvoke发送/发布消息
答案 1 :(得分:0)
虽然你说TCP已经出局了......
我非常热衷于使用ZeroMQ,但却没有机会。它是一个带有c#包装器的多平台,专为这种应用程序消息传递而设计。在http://www.zeromq.org/查看ZeroMQ。
来自其中一个网站的一些示例代码:
// Set up a publisher.
var publisher = new ZmqPublishSocket {
Identity = Guid.NewGuid().ToByteArray(),
RecoverySeconds = 10
};
publisher.Bind( address: "tcp://127.0.0.1:9292" );
// Set up a subscriber.
var subscriber = new ZmqSubscribeSocket();
subscriber.Connect( address: "tcp://127.0.0.1:9292" );
subscriber.Subscribe( prefix: "" ); // subscribe to all messages
// Add a handler to the subscriber's OnReceive event
subscriber.OnReceive += () => {
String message;
subscriber.Receive( out message, nonblocking: true );
Console.WriteLine( message );
};
// Publish a message to all subscribers.
publisher.Send( "Hello world!" );