Вызываете код C # из Java?
-
09-06-2019 - |
Вопрос
Есть ли у кого-нибудь хорошее решение для интеграции некоторого кода C # в java-приложение?
Код небольшой, поэтому я мог бы переписать его на java, но я бы предпочел повторно использовать код, если это возможно.Не повторяйтесь и т.д.
Кроме того, я знаю, что могу предоставить C # как веб-сервис или что-то еще, но в нем есть некоторые элементы безопасности / шифрования, поэтому я бы предпочел, чтобы он был тесно интегрирован, если это возможно.
Редактировать:Это будет приложение на базе сервера, поэтому "загрузка" другой среды выполнения не имеет значения.
Решение
Существует компилятор байт-кода IL для Java Кузнечик которые могут быть вам полезны.Хотя я никогда этого не пробовал.
Хотя я бы посмотрел на переписывание вашего кода на Java
Редактировать:Обратите внимание, что Grasshopper, похоже, больше недоступен.
Другие советы
Вы бы использовали собственный интерфейс Java для вызова вашего кода на C #, скомпилированного в DLL.
Если бы это был небольшой объем C #, было бы намного проще перенести его на Java.Если их много, это может быть хорошим способом сделать это.
Вот высокоуровневый обзор этого:
http://en.wikipedia.org/wiki/Java_Native_Interface
Другим вашим вариантом было бы создать COM-сборку из кода C # и использовать J-Interop для ее вызова.
Я являюсь автором книги jni4net, внутрипроцессный мост с открытым исходным кодом между JVM и CLR.Он построен поверх JNI и PInvoke.Никакого кода на C / C ++ не требуется.Я надеюсь, что это поможет вам.
Если это коротко, я думаю, вам лучше переписать код на java.Загрузка одной 50-мегабайтной среды выполнения достаточно плоха.
Мы использовали Джонбридж для этого все и сработало отлично.Он обрабатывает Java-> .NET и наоборот, все в proc.
Если вы не хотите переписывать, используйте его как Межпроцессная коммуникация и выберите один из следующих вариантов:
- Именованные трубы
- Розетки
- МЫЛО
Я бы переписал его, если это не доставит вам слишком много хлопот.Веб-сервис работал бы, но, похоже, это потребовало бы больших накладных расходов только для повторного использования небольшого количества кода.
http://www.infoq.com/articles/in-process-java-net-integration предлагает запускать CLR и JVM в одном и том же пространстве процессов и передавать вызовы туда и обратно.Это звучит очень эффективно.Я собираюсь попробовать и интегрировать это в Джейс если это хорошо сработает.
Если это фрагмент кода, который доступен как утилита командной строки, я просто заставляю другой язык хоста использовать системный вызов для выполнения утилиты.
Если вашему приложению на C # необходимо вызвать Java, скомпилируйте специальный Java main, который принимает соответствующие аргументы командной строки и возвращает текстовый вывод.
Это самый старый и простой метод.
Вы можете вызывать свои классы c # (скомпилированные в dll) через связующую библиотеку, доступны различные библиотеки, каждая со своими характеристиками. Джонбридж создайте прокси-классы, которые вы можете вызывать для управления кодом в классах Java. Мост JCOBridge позволяет вам загружать ваши классы c # и использовать их из java, также используя механизм invoke джавонет позволяет импортировать классы Java и вызывать java-код, используя механизм invoke.
Все рассмотренные решения являются коммерческими решениями, которые позволяют вызывать java-код из .NET и наоборот с интеграцией графического пользовательского интерфейса и другими удобствами.
Ссылки:
джонбридж java-.NET соедините схему лицензирования разработчика и развертывания с 30-дневной бесплатной пробной версией
мост jcobridge java-.NET соедините схему лицензирования разработчика и развертывания с неограниченной пробной версией
джавонет java-.NET объедините исследовательскую и профессиональную лицензионную схему с 30-дневной неограниченной пробной версией после регистрации