Я не ищу обычный ответ, как веб-службы. Я ищу легкое решение для запуска на одной машине.
Изменить: я ищу способ в Java для вызова методов .NET
Я не ищу обычный ответ, как веб-службы. Я ищу легкое решение для запуска на одной машине.
Изменить: я ищу способ в Java для вызова методов .NET
Я считаю, что Java может разговаривать с COM и .NET, может выставлять COM-интерфейсы. Так что это может быть очень легкое решение, которое не требует какой-либо третьей стороны. Существует также возможность использования сокетов для связи между программами, для которых не требуется установить на компьютер тяжелый экземпляр IIS.
Я автор jni4net, межпроцессный мост с открытым исходным кодом между JVM и CLR. Он построен на вершине JNI и PInvoke. Не требуется код C/С++. Надеюсь, это поможет вам.
Вы посмотрели IKVM?
Вы изучили интерфейс Java Native?
То, что я делал в прошлом, - это написать библиотеку C, которая может быть вызвана как с Java, так и с .NET(а также с языком сценариев COM, NSIS и другими технологиями).
JNI будет работать хорошо, если вы хотите только разоблачить несколько методов, но это может стать громоздким, если вы хотите, например, разоблачить всю платформу .NET из-за количества файлов заголовков и методов оболочки, которые вы бы необходимо создать.
Мы попробовали IKVM в нашей производственной среде, но он все время рушился. Мы используем JNBridge, который является коммерческим продуктом, но он очень стабилен и хорошо работает в нашей среде ASP.NET.
Если вы хотите запустить Java-код под .NET(или Mono), это можно сделать с помощью IKVM.
Потому что (насколько я знаю) текущие компиляторы Java не читают сборки .NET, есть 2 шага. Сначала вам нужно создать заглушку JAR, содержащую фиктивные классы и методы с подписями сборки .NET, которые вы хотите использовать, чтобы javac
(или ваша IDE) знает, какие методы доступны. Например, если вы хотите использовать что-то в основной стандартной библиотеке .NET с Java, запустите
ikvmstub mscorlib
который генерирует заглушку mscorlib.jar
. (Он нашел сборку Mono mscorlib.dll
для меня автоматически под Linux, но если она не удалась, возможно, вам придется предоставить полный путь к DLL.)
Затем вы можете записать файл Java, который его использует, например. (на основе примера из документации IKVM):
import cli.System.IO.Directory;
public class IKVMTest {
public static void main(String[] args) {
for(String file : Directory.GetFiles(".")) // From .NET standard library
System.out.println(file); // From Java standard library
}
}
Обратите внимание, что пакеты CLI имеют префикс cli.
, поэтому вместо System
import cli.System
следует импортировать cli.System
.
Чтобы скомпилировать, включите JAR-заглушку в путь к классам:
javac -classpath mscorlib.jar IKVMTest.java
Так как привязка Java происходит во время выполнения, выходные файлы class
используют методы требуемых имен и подписей, но вы можете поменять методы заглушки с помощью реальных методов .NET при запуске под IKVM:
ikvm IKVMTest
и он будет печатать файлы в текущем каталоге, вызывая методы .NET.