Вызов кода С# с Java?
Есть ли у кого-нибудь хорошее решение для интеграции некоторого кода на С# в Java-приложение?
Код небольшой, поэтому я могу переписать в java, но я предпочел бы использовать код, если это возможно. Не повторяйте себя и т.д.
Кроме того, я знаю, что могу показать С# в качестве веб-службы или что-то еще, но в нем есть некоторые материалы для защиты/шифрования, поэтому я предпочел бы, чтобы это было тесно интегрировано, если это возможно.
Изменить: он будет на серверном приложении, поэтому "загрузка" другой среды выполнения не имеет значения.
Ответы
Ответ 1
Существует компилятор IL-1 для Java Bytecode GrassHopper, который может вам пригодиться. Я никогда не пробовал, хотя.
Я бы посмотрел на переписывание вашего кода на Java, хотя
EDIT: Обратите внимание, что Grasshopper, кажется, больше не доступен.
Ответ 2
Вы должны использовать собственный интерфейс Java для вызова кода С#, скомпилированного в DLL.
Если его небольшое количество С#, было бы намного проще переносить его на Java. Если это много, это может быть хорошим способом сделать это.
Вот краткий обзор этого:
http://en.wikipedia.org/wiki/Java_Native_Interface
Другой вариант - создать COM-сборку из кода С# и использовать J-Interop для ее вызова.
http://sourceforge.net/projects/j-interop/
Ответ 3
Я автор jni4net, межпроцессный мост с открытым исходным кодом между JVM и CLR. Он построен на вершине JNI и PInvoke. Не требуется код C/С++. Надеюсь, это поможет вам.
Ответ 4
Если это коротко, я думаю, вам лучше переписать код в java. Загрузка одной 50 Мб времени исполнения достаточно плохая.
Ответ 5
Мы использовали JNBridge для этого, и он отлично работал. Он обрабатывает Java → .NET и наоборот, все в-proc.
Ответ 6
Если вы не хотите переписывать hasle как Inter-process communication и выберите один из следующих вариантов:
- Именованные каналы
- Сокеты
- SOAP
Ответ 7
Я бы переписал его, если это не слишком много проблем.
Веб-служба будет работать, но, похоже, для этого будет много накладных расходов, чтобы повторно использовать небольшой код.
Ответ 8
http://www.infoq.com/articles/in-process-java-net-integration предлагает запустить CLR и JVM в одном пространстве процессов и передавать вызовы туда и обратно. Звучит очень эффектно. Я попытаюсь интегрировать его в Jace, если он работает хорошо.
Ответ 9
Если это фрагмент кода, который можно использовать как утилиту командной строки, я просто заставляю другой язык хоста использовать системный вызов для выполнения этой утилиты.
Если вашему приложению С# нужно вызвать Java, скомпилируйте специальную Java-главную, которая принимает соответствующие аргументы командной строки и возвращает текст.
Это самый старый, самый простой метод.