Подтвердить что ты не робот

Вызов кода С# с Java?

Есть ли у кого-нибудь хорошее решение для интеграции некоторого кода на С# в Java-приложение?

Код небольшой, поэтому я могу переписать в java, но я предпочел бы использовать код, если это возможно. Не повторяйте себя и т.д.

Кроме того, я знаю, что могу показать С# в качестве веб-службы или что-то еще, но в нем есть некоторые материалы для защиты/шифрования, поэтому я предпочел бы, чтобы это было тесно интегрировано, если это возможно.


Изменить: он будет на серверном приложении, поэтому "загрузка" другой среды выполнения не имеет значения.

4b9b3361

Ответ 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-главную, которая принимает соответствующие аргументы командной строки и возвращает текст.

Это самый старый, самый простой метод.