7
votes

Interagir avec code Java de C #

Nous avons écrit un programme Java que nous cherchons à utiliser et à interagir avec C #. Quelles sont nos options? De manière optimale, il serait possible de compiler l'application Java en tant que bibliothèque (.dll) que nous pourrions faire référence à C # peut-être utiliser P / invoke. Cela ne semble toutefois pas être une option en fonction des premières recherches en ligne.

Nous choisissons de pouvoir utiliser ASP.NET pour créer un moteur de recherche alimenté par le code Java, de sorte que cela s'ouvre pour toute autre option, veuillez nous le faire savoir.


4 Réponses :


5
votes

L'approche la plus simple serait probablement de publier la fonctionnalité de votre bibliothèque Java en tant que services Web et d'ajouter une référence Web de votre application ASP.NET.


0 commentaires

7
votes

Désolé, vous ne peut pas code> appel java code / classes code> directement code> du code C #.

Une façon de faire cela est de Enveloppe Code> Upfres classes Java dans un Java Web Service CODE> et appelez les classes indirectement code> via cette interface de service Web dans votre code C #. P>

Une autre manière utilise JAVAREG.EXE CODE> qui expose les classes Java comme com code>. Vous pouvez le trouver à l'emplacement suivant: P>

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


0 commentaires

2
votes

Java n'est pas censé être intégré dans un autre programme, vous avez donc besoin d'un pont. La solution la plus simple consiste à utiliser une prise: Créer un processus Java qui écoute les commandes sur une prise. Dans le C #, envoyez les commandes à la prise et lisez les réponses.

Le problème principal ici est la sérialisation, mais si vous utilisez XML, ce n'est plus une douleur aussi importante. Essayez la sérialisation XML intégrée ( Voir cet article ) ou cadres personnalisés comme XStream ou Simple .


3 commentaires

"Java n'est pas censé être intégré dans un autre programme" sauf les navigateurs Web (applets Java).


@PowerLord: belle idée. Donc, il vous suffit d'imiter l'API Netscape Navigateur dans votre application ... mais je ne sais pas que tout développeur normal puisse gérer la configuration de la sécurité, évitant de devoir ouvrir l'applet sur l'écran quelque part, etc.


Digullla: Je ne suggérais pas qu'ils le font, je remarquais juste qu'il y a une exception.



0
votes

Il est certainement possible d'envelopper Java dans un .dll et fait partie de la plate-forme Java Core depuis plus de 10 ans. JNI (Java Native Interface) a une interface pour intégrer une JVM dans votre code, ce qui signifie que vous pouvez exécuter des classes Java à l'aide de la liaison de style C. Notez que cela nécessitera que vous écrivez une wrapper C simple, il y a des échantillons dans: http://java.sun.com/docs/books/jni /html/invoke.html#11202

Comme certains de ces autres postes suggèrent, il est parfois souhaitable d'être moins étroitement couplé, vous voudrez peut-être envisager d'utiliser une autre conception. Une option serait une base de données simple, où l'application Java interroge régulièrement les demandes du code C #. Si vous voulez un couplage plus étroit, pour des éléments tels que les appels, vous pouvez regarder des interfaces distribuées.


4 commentaires

Je suis coincé sur des appels. Qu'entendez-vous par des interfaces distribuées?


Que si vous créez une solution locale étroitement liée, JNI vaut toujours la peine d'être envisagée (il prend en charge les appels de rappel), mais si vous voulez moins étroitement couplé que la solution locale, et plus étroitement couplé qu'une solution à base de scrutin, vous peut utiliser des interfaces distribuées comme le savon. JAX-WS, par exemple, prend en charge les rappels.


J'ai été redirigé ici à cause de Jni. Veuillez renvoyer ce Lien


Je suis bloqué quelque part pour obtenir une solution pour Ce Cela me redirige de JNI et emballages.