2010-03-17 42 views
6

我们已经编写了一个Java程序,我们正在寻找使用C#进行交互的Java程序。我们有什么选择?理想情况下,可以将Java应用程序编译为库(.DLL),我们可以使用P/Invoke从C#引用它。但是,根据网上的前几个搜索,这似乎不是一种选择。与C#中的java代码进行交互#

我们选择使用ASP.NET构建一个由Java代码驱动的搜索引擎,所以如果这可以打开任何其他选项,请告诉我们。

+0

可能的重复项:http://stackoverflow.com/questions/129989/how-to-call-java-code-from-c http://stackoverflow.com/questions/246096/how-can-i-integrate -java-with-net http://stackoverflow.com/questions/152967/can-you-use-java-libraries-in-a-vb-net-program http://stackoverflow.com/questions/191622/c -java-interoperation – 2010-03-17 12:51:25

回答

6

对不起,你要cannot致电java code/classesDirectly来自C#代码。

这样做的一个方法是wrap你的java类在java Web Service和调用类indirectly通过该C#代码中的Web服务接口。

另一种方法是使用 javareg.exe,它将java类公开为COM。您可以在以下位置找到它:

C:\Program Files\Microsoft VisualStudio\VIntDev98\bin\javareg.exe 

下列职位可能会有所帮助

4

最简单的方法可能是将java库的功能发布为Web服务,并从您的asp.net应用程序添加Web引用。

2

Java不是意味着嵌入到另一个程序中,所以你需要一个桥梁。最简单的解决方案是使用套接字:创建一个在套接字上侦听命令的Java进程。在C#中,将命令发送到套接字并阅读答案。

这里的主要问题是序列化,但如果你使用XML,它不再是一个很大的痛苦了。尝试使用内置的XML序列化(see this article)或自定义框架(如XStreamSimple)。

+1

“Java并不意味着嵌入到另一个程序中”除了Web浏览器(Java Applets)。 – Powerlord 2010-03-17 13:20:04

+0

@Powerlord:好主意。所以你只需要在你的应用程序中模拟Netscape浏览器API ......但是,我不确定是否有任何普通的开发人员可以处理安全设置,避免必须在屏幕上实际打开该小程序等。 – 2010-03-17 15:16:20

+0

Digullla:我不是在暗示他们这么做,我只是注意到有一个例外。 – Powerlord 2010-03-17 17:02:38

0

将Java打包到.dll当然是可以的,并且已经有10多年的Java核心平台。 JNI(Java本地接口)有一个用于在代码中嵌入JVM的接口,这意味着您可以使用C风格链接运行Java类。请注意,这将要求你写一个简单的C包装,有内样本: http://java.sun.com/docs/books/jni/html/invoke.html#11202

由于一些其他职位的建议,有时是希望少紧密耦合,所以你可能要考虑使用另一种设计。一种选择是一个简单的数据库,Java应用程序定期轮询来自C#代码的请求。如果您想要更紧密的耦合,例如回叫,您可以查看分布式接口。