2010-03-17 14 views
6

Hemos escrito un programa Java que queremos utilizar e interactuar con C#. ¿Cuáles son nuestras opciones? De forma óptima, sería posible compilar la aplicación Java como una biblioteca (.DLL) a la que podríamos hacer referencia desde C# quizás utilizando P/Invoke. Esto, sin embargo, no parece ser una opción de acuerdo con las primeras búsquedas en línea.Interactuando con el código java de C#

Optamos por poder utilizar ASP.NET para crear un motor de búsqueda con el código de Java, por lo que si esto abre para otras opciones, por favor háganos saber.

+0

Posibles duplicados: http://stackoverflow.com/questions/129989/how-to-call-java-code-from-c http://stackoverflow.com/questions/246096/how-can-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 –

Respuesta

6

Lo siento, cannot llame java code/classesDirectly desde C# código.

Una forma de hacerlo es wrap hasta sus clases java en un java Web Service y llame a las clases indirectly a través de esa interfaz de servicio web en su código C#.

Otra forma es usar javareg.exe que expone las clases de Java como COM. Usted lo puede encontrar en la ubicación siguiente:

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

siguientes puestos podrían ayudar también

4

El enfoque más simple sería probablemente publicar la funcionalidad de su biblioteca java como servicios web y agregar una referencia web desde su aplicación asp.net.

2

Java no es significa estar incrustado en otro programa, por lo que necesita un puente. La solución más simple es usar un socket: crea un proceso Java que escucha los comandos en un socket. En C#, envíe los comandos al socket y lea las respuestas.

El principal problema aquí es la serialización pero si usas XML, ya no es un gran dolor. Pruebe la serialización XML incorporada (see this article) o marcos personalizados como XStream o Simple.

+1

"Java no está destinado a ser incorporado en otro programa" Except browsers (Java Applets). – Powerlord

+0

@Powerlord: Buena idea.Así que solo tiene que emular la API del navegador Netscape en su aplicación ... pero entonces, no estoy seguro de si un desarrollador normal puede manejar la configuración de seguridad, evitando tener que abrir el applet en la pantalla, etc. –

+0

Digullla: No estaba sugiriendo que lo hicieran, solo estaba notando que hay una excepción. – Powerlord

0

Es ciertamente posible incluir Java en .dll, y ha sido parte de la plataforma central de Java por más de 10 años. JNI (Java Native Interface) tiene una interfaz para incrustación de una JVM en su código, lo que significa que puede ejecutar clases de Java utilizando enlaces estilo C. Tenga en cuenta que esto requerirá que usted escribe un simple envoltorio C, hay muestras dentro de: http://java.sun.com/docs/books/jni/html/invoke.html#11202

Como algunos de estos otros mensajes sugieren, a veces es deseable ser menos fuertemente acoplado, por lo que es posible que desee considerar el uso de otro diseño . Una opción sería una base de datos simple, donde la aplicación Java sondea regularmente las solicitudes del código C#. Si desea un acoplamiento más estricto, para cosas como los call-backs, puede ver las interfaces distribuidas.

Cuestiones relacionadas