IPC:WM_COPYDATA +序列化/反序列化

时间:2010-07-29 00:31:20

标签: c# .net serialization wm-copydata

我目前正在开发2个必须相互通信的.NET应用程序。选择了简单的Windows Messaging,目前这很好用。 消息中发送的数据是一个简单的字符串,但现在我创建了一个消息类,其中包含一个命令(枚举)和一个数据(字符串)成员,以及后来可能的其他成员。

当我发送这样一个消息类的实例时,它被序列化为字节,然后转换为base64字符串。然后使用Windows的SendMessage()发送。 另一方面,我则反其道而行之。最终,原始对象将在其他应用程序中恢复并可用。

虽然这种机制似乎有效,但我想知道这样做是否安全。 实际上,有一些开销,base64字符串比原始字符串解决方案长得多(但我必须手动解析这个tring以获取命令和数据部分) 是否可以使用SendMessage发送消息的最大大小?

此外,我宁愿远离这个项目的.NET远程处理,并继续使用SendMessage解决方案。

有什么想法吗?也许使用JSON来限制开销?

感谢。

鼠兔

3 个答案:

答案 0 :(得分:1)

使用支持WM_COPYDATA,命名管道和IOStream消息传递的XDMessaging(http://xdmessaging.codeplex.com/) - 提供高度灵活,强大且经过测试的解决方案,而不是自己滚动。

如何在类(http://msdn.microsoft.com/en-us/library/4abbf6k0(v=VS.71).aspx)上使用二进制序列化和XDMessaging?它非常紧凑,易于实现。

答案 1 :(得分:0)

如果您只需要发送消息,请查看消息总线架构,如Rhino Service BusNServiceBus。它们将提供相对简单且更强大的消息传递实现。

答案 2 :(得分:0)

我真的建议使用更现代,可扩展的方法。例如,您可以轻松使用named pipes进行通信,只使用标准流功能,而不是尝试发送需要编码的消息。

(就个人而言,我可能会使用WCF,因为它有很多好处,包括允许它在不同的机器上免费工作......)