我們已經編寫了一個Java程序,我們正在尋找使用C#進行交互的Java程序。我們有什麼選擇?理想情況下,可以將Java應用程序編譯爲庫(.DLL),我們可以使用P/Invoke從C#引用它。但是,根據網上的前幾個搜索,這似乎不是一種選擇。與C#中的java代碼進行交互#
我們選擇使用ASP.NET構建一個由Java代碼驅動的搜索引擎,所以如果這可以打開任何其他選項,請告訴我們。
我們已經編寫了一個Java程序,我們正在尋找使用C#進行交互的Java程序。我們有什麼選擇?理想情況下,可以將Java應用程序編譯爲庫(.DLL),我們可以使用P/Invoke從C#引用它。但是,根據網上的前幾個搜索,這似乎不是一種選擇。與C#中的java代碼進行交互#
我們選擇使用ASP.NET構建一個由Java代碼驅動的搜索引擎,所以如果這可以打開任何其他選項,請告訴我們。
對不起,你要cannot
致電java code/classes
Directly
來自C#代碼。
這樣做的一個方法是wrap
你的java類在java Web Service
和調用類indirectly
通過該C#代碼中的Web服務接口。
另一種方法是使用 javareg.exe
,它將java類公開爲COM
。您可以在以下位置找到它:
C:\Program Files\Microsoft VisualStudio\VIntDev98\bin\javareg.exe
下列職位可能會有所幫助
最簡單的方法可能是將java庫的功能發佈爲Web服務,並從您的asp.net應用程序添加Web引用。
Java不是意味着嵌入到另一個程序中,所以你需要一個橋樑。最簡單的解決方案是使用套接字:創建一個在套接字上偵聽命令的Java進程。在C#中,將命令發送到套接字並閱讀答案。
這裏的主要問題是序列化,但如果你使用XML,它不再是一個很大的痛苦了。嘗試使用內置的XML序列化(see this article)或自定義框架(如XStream或Simple)。
將Java打包到.dll當然是可以的,並且已經有10多年的Java核心平臺。 JNI(Java本地接口)有一個用於在代碼中嵌入JVM的接口,這意味着您可以使用C風格鏈接運行Java類。請注意,這將要求你寫一個簡單的C包裝,有內樣本: http://java.sun.com/docs/books/jni/html/invoke.html#11202
由於一些其他職位的建議,有時是希望少緊密耦合,所以你可能要考慮使用另一種設計。一種選擇是一個簡單的數據庫,Java應用程序定期輪詢來自C#代碼的請求。如果您想要更緊密的耦合,例如回叫,您可以查看分佈式接口。
可能的重複項: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