Domanda

Qualcuno ha una buona soluzione per integrare del codice C# in un'applicazione Java?

Il codice è piccolo, quindi potrei riscriverlo in Java, ma preferirei riutilizzare il codice se possibile.Non ripeterti, ecc.

Inoltre, so che posso esporre C# come servizio Web o altro, ma contiene alcuni elementi di sicurezza/crittografia, quindi preferirei mantenerlo strettamente integrato, se possibile.


Modificare:Sarà su un'app basata su server, quindi "scaricare" un altro runtime è irrilevante.

È stato utile?

Soluzione

Esiste un compilatore da IL a Java Bytecode Cavalletta che potrebbe esserti utile.Non l'ho mai provato però.

Tuttavia, cercherei di riscrivere il tuo codice in Java

MODIFICARE:Tieni presente che Grasshopper sembra non essere più disponibile.

Altri suggerimenti

Utilizzeresti l'interfaccia nativa Java per chiamare il codice C# compilato in una DLL.

Se si tratta di una piccola quantità di C#, sarebbe molto più semplice portarlo su Java.Se è molto, questo potrebbe essere un buon modo per farlo.

Ecco una panoramica di alto livello:

http://en.wikipedia.org/wiki/Java_Native_Interface

L'altra opzione sarebbe creare un assembly COM dal codice C# e utilizzare J-Interop per richiamarlo.

http://sourceforge.net/projects/j-interop/

Sono autore di jni4net, ponte intraprocesso open source tra JVM e CLR.È basato su JNI e PInvoke.Non è necessario alcun codice C/C++.Spero che ti aiuterà.

Se è breve, penso che faresti meglio a riscrivere il codice in Java.Scaricare un runtime da 50 Mb è già abbastanza grave.

Abbiamo usato JNBridge per questo, e ha funzionato benissimo.Gestisce Java->.NET e viceversa, tutto in-proc.

Se non vuoi riscriverlo, gestiscilo come un file Comunicazione tra processi e scegli uno dei seguenti:

  • Pipe con nome
  • Prese
  • SAPONE

Lo riscriverei se non è troppo disturbo.Il servizio web funzionerebbe, ma sembra che sarebbe un sovraccarico solo riutilizzare un piccolo codice.

http://www.infoq.com/articles/in-process-java-net-integration suggerisce di eseguire CLR e JVM nello stesso spazio di processo e di passare le chiamate avanti e indietro.Sembra molto efficiente.Lo proverò e lo integrerò Jace se funziona bene.

Se si tratta di un pezzo di codice esponebile come utilità della riga di comando, faccio semplicemente in modo che l'altro linguaggio host utilizzi una chiamata di sistema per eseguire l'utilità.

Se la tua app C# deve chiamare Java, compila uno speciale Java main che accetta gli argomenti della riga di comando appropriati e restituisce l'output di testo.

È il metodo più antico e più semplice.

Puoi chiamare le tue classi c# (compilate in una dll) tramite una libreria bridging, sono disponibili varie librerie, ognuna con le sue caratteristiche. JNBridge generare classi proxy che puoi chiamare per gestire il codice nelle classi Java. JCO Bridge ti consente di caricare le tue classi C# e di usarle da Java utilizzando anche il meccanismo di invocazione javonet ti consente di importare classi Java e chiamare il codice Java utilizzando il meccanismo di invocazione.
Tutte le soluzioni esplorate sono soluzioni commerciali che consentono di chiamare codice Java da .NET e viceversa con integrazione dell'interfaccia utente grafica e altri servizi.

Collegamenti:
jnbridge Java-.NET Bridge Schema di licenza per sviluppatori e distribuzione con prova gratuita di 30 giorni
jcobridge java-.NET bridge Schema di licenza per sviluppatori e distribuzione con prova illimitata
javonet schema di licenza java-.NET bridge Research e Professional con prova illimitata di 30 giorni dopo la registrazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top