2010-03-17 19 views
6

Abbiamo scritto un programma Java che stiamo cercando di utilizzare e interagire con C#. Quali sono le nostre opzioni? In modo ottimale sarebbe possibile compilare l'applicazione Java come una libreria (.DLL) che potremmo fare riferimento a C# magari usando P/Invoke. Questo, tuttavia, non sembra essere un'opzione in base alle prime ricerche online.Interagire con codice java da C#

Optiamo per poter utilizzare ASP.NET per creare un motore di ricerca alimentato dal codice Java, quindi se questo si apre per qualsiasi altra opzione, fatecelo sapere.

+0

Possibili duplicati: 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 –

risposta

6

Spiacente, è cannot chiamata java code/classesDirectly dal codice C#.

Un modo per farlo è quello di wrap le classi java in un java Web Service e chiamare le classi indirectly tramite l'interfaccia del servizio Web nel codice C#.

Un altro modo è utilizzare javareg.exe che espone le classi java come COM. Lo si può trovare in posizione seguente:

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

seguenti posti potrebbero aiutare pure

4

L'approccio più semplice sarebbe probabilmente quello di pubblicare la funzionalità della libreria java come servizi Web e aggiungere un riferimento Web dall'applicazione asp.net.

2

Java non è pensato per essere incorporato in un altro programma, quindi è necessario un bridge. La soluzione più semplice è utilizzare un socket: creare un processo Java che ascolti i comandi su un socket. Nel C#, invia i comandi al socket e leggi le risposte.

Il problema principale qui è la serializzazione, ma se si utilizza XML, non è più un grande dolore. Prova la serializzazione XML incorporata (see this article) o framework personalizzati come XStream o Simple.

+1

"Java non è pensato per essere incorporato in un altro programma" Tranne i browser Web (Java Applet). – Powerlord

+0

@Powerlord: bella idea.Quindi devi solo emulare l'API del browser Netscape nella tua applicazione ... ma poi, non sono sicuro se uno sviluppatore normale possa gestire l'impostazione di sicurezza, evitando di dover effettivamente aprire l'applet sullo schermo da qualche parte, ecc. –

+0

Digullla: Non stavo suggerendo che lo facessero, stavo solo notando che c'è un'eccezione. – Powerlord

0

È certamente possibile avvolgere Java in una DLL e fa parte della piattaforma Java principale da oltre 10 anni. JNI (Java Native Interface) ha un'interfaccia per incorporare una JVM nel tuo codice, il che significa che puoi eseguire le classi Java usando il collegamento in stile C. Si noti che questo richiede che si scrive un semplice involucro C, ci sono campioni entro: http://java.sun.com/docs/books/jni/html/invoke.html#11202

Come alcuni di questi altri posti suggeriscono, a volte è desiderabile essere meno strettamente accoppiati, quindi si consiglia di considerare l'utilizzo di un altro disegno . Un'opzione sarebbe un semplice database, in cui l'applicazione Java esegue regolarmente il polling delle richieste dal codice C#. Se vuoi un accoppiamento più stretto, per cose come i call-back, puoi guardare le interfacce distribuite.

Problemi correlati