2010-03-17 10 views
6

Wir haben ein Java-Programm geschrieben, das wir verwenden und mit C# interagieren möchten. Was sind unsere Möglichkeiten? Optimal wäre es möglich, die Java-Anwendung als eine Bibliothek (.DLL) zu kompilieren, die wir aus C# referenzieren könnten, vielleicht mit P/Invoke. Dies scheint jedoch keine Option gemäß den ersten Online-Suchen zu sein.Interaktion mit Java-Code von C#

Wir entscheiden uns dafür, ASP.NET zu verwenden, um eine Suchmaschine zu entwickeln, die auf dem Java-Code basiert. Wenn dies für andere Optionen offen ist, lassen Sie es uns bitte wissen.

+0

Mögliche Duplikate: http://stackoverflow.com/questions/129989/how-to-call-java-code-from-c http://stackoverflow.com/questions/246096/how-can-i-integrate -java-mit-net http://stackoverflow.com/questions/152967/can-you-use-java-libraries-in-a-vb-net-program http://stackoverflow.com/questions/191622/c -java-interoperation –

Antwort

6

Entschuldigen Sie, Sie cannot rufen Sie Java code/classesDirectly von C# -Code.

Eine Möglichkeit, dies zu tun, ist wrap Ihre Java-Klassen in einem java Web Service und Anruf Klassen indirectly über diese Web-Service-Schnittstelle in Ihrem C# -Code.

Eine andere Möglichkeit ist die Verwendung javareg.exe, die Java-Klassen als COM verfügbar macht. Sie können es an folgendem Ort:

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

Folgende Beiträge könnten auch helfen

4

Der einfachste Ansatz wäre wahrscheinlich, die Funktionalität Ihrer Java-Bibliothek als Webdienste zu veröffentlichen und eine Web-Referenz aus Ihrer asp.net-Anwendung hinzuzufügen.

2

Java ist nicht in ein anderes Programm eingebettet werden soll, also brauchen Sie eine Brücke. Die einfachste Lösung ist die Verwendung eines Sockets: Erstellen Sie einen Java-Prozess, der auf Befehle an einem Socket wartet. Senden Sie im C# die Befehle an den Socket und lesen Sie die Antworten.

Das Hauptproblem ist hier Serialisierung, aber wenn Sie XML verwenden, ist es nicht mehr so ​​ein großer Schmerz. Probieren Sie die integrierte XML-Serialisierung (see this article) oder benutzerdefinierte Frameworks wie XStream oder Simple aus.

+1

"Java ist nicht dazu gedacht, in ein anderes Programm eingebettet zu werden" Außer Webbrowsern (Java Applets). – Powerlord

+0

@Powerlord: Schöne Idee.Sie müssen also nur die Netscape-Browser-API in Ihrer Anwendung emulieren ... aber dann bin ich mir nicht sicher, ob ein normaler Entwickler mit der Sicherheitseinrichtung umgehen kann, ohne das Applet irgendwo auf dem Bildschirm öffnen zu müssen usw. –

+0

Digullla: Ich habe nicht vorgeschlagen, dass sie es tun, ich habe nur bemerkt, dass es eine Ausnahme gibt. – Powerlord

0

Es ist sicherlich möglich, Java in eine .dll einzubinden, und ist seit über 10 Jahren Teil der Java-Kernplattform. JNI (Java Native Interface) verfügt über eine Schnittstelle zum Einbetten einer JVM in Ihren Code, was bedeutet, dass Sie Java-Klassen mit C-Style-Verknüpfungen ausführen können. Beachten Sie, dass dies erfordert, dass Sie einen einfachen C-Wrapper schreiben, gibt es Proben innerhalb von: http://java.sun.com/docs/books/jni/html/invoke.html#11202

Da einige dieser anderen Stellen vorschlagen, manchmal wünschenswert, es ist weniger als eng miteinander gekoppelt, so können Sie mit einem anderen Entwurf zu prüfen, . Eine Option wäre eine einfache Datenbank, in der die Java-Anwendung regelmäßig nach Anfragen aus dem C# -Code fragt. Wenn Sie eine engere Kopplung wünschen, können Sie für Dinge wie Rückrufe verteilte Schnittstellen betrachten.