我该如何在.NET和Java之间创建跨平台的进程间通信?

4

我想开发一个特定的插件/扩展程序,需要在eclipse中运行,并且必须与另一个(Java)插件集成,但它必须从.NET程序集中收集数据(使用mono's cecil)。

因此,我的问题是如何在Java代码和.NET之间创建这种关系? 我知道可以使用mono在Linux上运行.NET应用程序,但我有两个问题:我希望Java插件启动.NET应用程序,以及如何让Java插件对.NET应用程序进行某些调用。

为了实现这两个应用程序之间的通信,我希望它是平台无关的,以便相同的二进制文件可以在Windows、OSX和Linux中运行。另一个可能重要的事实是,调用的结果可能包含相当大量的对象。

或者也许更好/可能将.NET程序集托管在Java内部并直接调用它?

更新: 我认为理想的答案应解决以下问题:

  • 如何从Java端启动/调用.NET程序集/应用程序(跨平台)。
  • 如何与.NET程序集通信
  • 这些选择对修改性有什么影响
2个回答

6

应用程序之间的通信。

如何让Java应用程序与.NET应用程序通信

传输

如何在Java和.NET应用程序之间传输信息。

  • 套接字 - 连接可以保持打开状态,并且双方都可以发送内容(= 充当客户端)
  • Web服务 - 不保留连接,事件处理效果不佳

序列化

如何将对象转换为易于传输的格式。

  • 普通XML - 轻松入门。Java和.NET均具有出色的XML支持
  • SOAP - 如果您想向所有人公开API,则非常好。有点复杂。
  • Protobof - Google的序列化协议。存在很多不同的实现。
  • 自定义二进制序列化 - 构建自己的序列化库

如何从Java中加载.NET程序集

在Mono中运行Java应用程序 ;)

http://www.ikvm.net/


我不想强制插件的用户在Mono中加载Eclipse ;) - Davy Landman
虽然这是可行的 :-) http://developers.slashdot.org/article.pl?sid=03/05/10/2127222 - skolima
这只是Eclipse在运行...更不用说所有那些插件了 ;) 但是,我不认为IKVM是解决这个问题的方案。 - Davy Landman
你可以始终通过stdin/stdout进行通信。虽然是老方法,但始终具有可移植性。 - pablo

1

你可以使用Tcp/Ip让它们进行通信


有人可以使用它,但需要对核心层面的事物有很多知识。在我看来,它有些复杂。 - Kunal0615

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接