Взаимодействие с java-кодом из C#
-
20-09-2019 - |
Вопрос
Мы написали Java-программу, которую хотим использовать и взаимодействовать с C #.Какие у нас есть варианты?Оптимально было бы скомпилировать Java-приложение в виде библиотеки (.DLL), на которую мы могли бы ссылаться из C #, возможно, используя P / Invoke .Однако, судя по первым нескольким поисковым запросам в Интернете, это не вариант.
Мы выбираем возможность использовать ASP.NET для создания поисковой системы, основанной на коде Java, поэтому, если это откроет какие-либо другие возможности, пожалуйста, сообщите нам об этом.
Решение
Извини, ты cannot
вызовите java code / classes
Directly
из кода C #.
Один из способов сделать это - это wrap
обновите свои классы Java в java Web Service
и вызывать классы indirectly
через этот интерфейс веб-службы в вашем коде C #.
Другой способ заключается в использовании
javareg.exe
который предоставляет классы java как COM
.Вы можете найти его по следующему адресу:
C:\Program Files\Microsoft VisualStudio\VIntDev98\bin\javareg.exe
Следующие сообщения также могут помочь
- Вызов классов Java непосредственно из .NET (использует runtime bridge)
- Вызов Java из Microsoft.NET
Другие советы
Самый простой подход, вероятно, будет публиковать функциональность вашего библиотеки Java в качестве веб-службы и добавить веб-ссылку из своего приложения asp.net .
Java не предназначена для встраивания в другую программу, поэтому вам нужен мост.Самое простое решение - использовать сокет:Создайте Java-процесс, который прослушивает команды в сокете.В C # отправьте команды в сокет и прочитайте ответы.
Основной проблемой здесь является сериализация, но если вы используете XML, это уже не такая большая проблема.Попробуйте встроенную XML-сериализацию (смотрите эту статью) или пользовательские фреймворки, такие как XStream - поток или Простой.
Безусловно, Java можно обернуть в .dll, и она является частью базовой платформы Java уже более 10 лет.JNI (Java Native Interface) имеет интерфейс для встраивания JVM в ваш код, что означает, что вы можете запускать классы Java, используя связывание в стиле C.Обратите внимание, что для этого потребуется, чтобы вы написали простую оболочку C, внутри которой есть образцы:http://java.sun.com/docs/books/jni/html/invoke.html#11202
Как предполагают некоторые из этих других сообщений, иногда желательно, чтобы они были менее тесно связаны, поэтому вы можете рассмотреть возможность использования другого дизайна.Одним из вариантов была бы простая база данных, где Java-приложение регулярно опрашивает запросы из кода C #.Если вам нужна более тесная связь, для таких вещей, как обратные вызовы, вы можете посмотреть на распределенные интерфейсы.