Вызов .NET DLL скомпилирован под Mono из приложения Grails или использовать SOAP? - PullRequest
0 голосов
/ 22 марта 2011

Часть моего проекта написала весь свой код на C #.Наше веб-приложение находится в Grails и нуждается в доступе к его коду.Интерфейс для того, что нам нужно, очень прост (например, передайте имя файла в виде строки).Я могу скомпилировать его с Mono, так как наша среда основана на * nix, но я бы хотел избежать настройки веб-сервисов ASMX с помощью mod_mono и просто вызывать dll с помощью JNA или JNI.Возможно ли это и есть ли у кого-нибудь хорошие примеры этого?Или самый простой вариант - настроить WS или какой-либо другой механизм RPC?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

У меня нет опыта ни с одним из следующего, но поскольку Grails работает на JVM, они могут работать для вас.Я не уверен, как использование Mono повлияет на ваши результаты. jni4net предназначен для простого вызова кода .net из Java.Другой вариант - запустить приложение Grails, используя IKVM в качестве виртуальной машины.Я не уверен, насколько хорошо это будет работать, поскольку IKVM не поддерживает все функции стандартной виртуальной машины Java.Для получения информации о вызове кода Mono из Java см. эту ссылку. Другие возможные варианты см. этот вопрос Все они должны быть использованы, поскольку Grails работает на JVM, но использует Mono вместо обычного.Платформа .net может вызвать другие проблемы.

0 голосов
/ 24 марта 2011

Я фактически закончил тем, что делал что-то, что я обычно считаю ужасным, но кажется самым легким.У меня есть сборка .Net, которую я могу внести в виде DLL в свой собственный файл .exe, который работает в Mono.Я просто позвоню в службу Grails, используя информацию из Codehaus .В моем .Net exe я верну String в STDOUT, который я могу использовать с помощью возможностей Groovy Eval, например, так (упрощенно):

// something like ['mono', "/opt/external/dotnet.exe", "parm1"]
def command = getCommandBasedOnSystem(exePath, urlPath)
def proc = command.execute()
// STDOUT: [prop1:"test", prop2:"something"] as HashMap
def object = Eval.me(proc.in.text)
// Processing based on object

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

...