Взаимодействие с Java-кодом из C#
Мы написали программу на Java, которую мы хотим использовать и взаимодействовать с C#. Какие у нас варианты? Оптимально было бы возможно скомпилировать приложение Java как библиотеку (.DLL), на которую мы могли бы ссылаться из C#, возможно, используя P/Invoke. Это, однако, не представляется возможным в соответствии с первыми несколькими поисками в Интернете.
Мы решили использовать ASP.NET для создания поисковой системы, работающей на Java-коде, поэтому, если это открывает какие-либо другие варианты, пожалуйста, сообщите нам об этом.
4 ответа
Прости ты cannot
позвони в Яву 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 (использует мост времени выполнения)
- Вызов Java из Microsoft.NET
Самый простой подход, вероятно, состоит в том, чтобы опубликовать функциональность вашей библиотеки Java в виде веб-служб и добавить веб-ссылку из вашего приложения asp.net.
Java не предназначена для встраивания в другую программу, поэтому вам нужен мост. Наиболее простым решением является использование сокета: создайте процесс Java, который прослушивает команды в сокете. В C# отправьте команды в сокет и прочитайте ответы.
Основная проблема здесь - сериализация, но если вы используете XML, это уже не такая большая проблема. Попробуйте встроенную сериализацию XML ( см. Эту статью) или пользовательские инфраструктуры, такие как XStream или Simple.
Конечно, можно обернуть Java в.dll и является частью базовой платформы Java более 10 лет. JNI (Java Native Interface) имеет интерфейс для встраивания JVM в ваш код, что означает, что вы можете запускать классы Java, используя связывание в стиле C. Обратите внимание, что для этого потребуется написать простую оболочку C, примеры которой находятся по адресу: http://java.sun.com/docs/books/jni/html/invoke.html
Как показывают некоторые из этих других сообщений, иногда желательно быть менее тесно связанными, поэтому вы можете рассмотреть возможность использования другого дизайна. Одним из вариантов может быть простая база данных, где приложение Java регулярно опрашивает запросы из кода C#. Если вы хотите более тесную связь, для таких вещей, как обратные вызовы, вы можете посмотреть на распределенные интерфейсы.