¿Cómo puedo llamar al código .NET de Java?

No estoy buscando la respuesta habitual como servicios web. Estoy buscando una solución ligera para ejecutar en la misma máquina.

Editar: estoy buscando la forma en Java para llamar a los métodos .NET

Creo que Java puede hablar con COM y .NET puede exponer las interfaces COM. Entonces, puede ser una solución muy liviana que no requiera ninguna tercera parte. También existe la opción de usar sockets para comunicarse entre los progtwigs que no requerirían una gran instancia de IIS para instalarse en la máquina.

Soy autor de jni4net , puente de interproceso de código abierto entre JVM y CLR. Se basa en JNI y PInvoke. No se necesita código C / C ++. Espero que te ayude.

¿Has mirado IKVM ?

¿Has mirado en la interfaz nativa de Java?

Lo que he hecho en el pasado es escribir una biblioteca C, que se puede invocar desde Java y .NET (y también con el lenguaje de scripts COM, NSIS y otras tecnologías).

El JNI funcionaría bien si solo quieres exponer algunos métodos, pero podría ser difícil de manejar si quisieras, por ejemplo, exponer todo el framework .NET, debido a la cantidad de archivos de cabecera y métodos de contenedor que necesitarías crear. .

Probamos IKVM en nuestro entorno de producción pero siguió fallando. Usamos JNBridge, que es un producto comercial, pero es muy estable y funciona bien en nuestro entorno ASP.NET.

Si está dispuesto a ejecutar su código Java en .NET (o Mono), es posible hacerlo con IKVM .

Porque (hasta donde yo sé) los comstackdores de Java actuales no leen los ensamblados .NET, hay 2 pasos. En primer lugar, debe generar un archivo auxiliar JAR que contenga clases y métodos ficticios con las firmas del ensamblado .NET que desee utilizar, para que javac (o su IDE) sepa qué métodos están disponibles. Por ejemplo, si desea usar algo en la biblioteca estándar .NET principal de Java, ejecute

 ikvmstub mscorlib 

que genera el stub mscorlib.jar . (Encontró el ensamblado Mono mscorlib.dll automáticamente bajo Linux, pero si falla puede que tenga que dar la ruta completa a la DLL).

A continuación, puede escribir un archivo Java que lo use, p. Ej. ( Según el ejemplo de la documentación de IKVM ):

 import cli.System.IO.Directory; public class IKVMTest { public static void main(String[] args) { for(String file : Directory.GetFiles(".")) // From .NET standard library System.out.println(file); // From Java standard library } } 

Tenga en cuenta que los paquetes CLI tienen el prefijo cli. , de ahí la importación cli.System lugar de solo System .

Para comstackr, incluya el código auxiliar JAR en el classpath:

 javac -classpath mscorlib.jar IKVMTest.java 

Como los enlaces de Java se producen en tiempo de ejecución, los archivos de la class salida utilizan los métodos de los nombres y firmas deseados, pero puede intercambiar los métodos de código auxiliar ficticio con los métodos .NET reales cuando se ejecutan en IKVM:

 ikvm IKVMTest 

e imprimirá los archivos en el directorio actual llamando a los métodos .NET.