2010-03-17 80 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#代碼的請求。如果您想要更緊密的耦合,例如回叫,您可以查看分佈式接口。