我项目的一部分用C#编写了所有代码。我们的Web应用程序使用Grails,需要访问其代码。我们需要的接口非常简单(例如,将文件名作为String传递)。我可以使用Mono编译它,因为我们的环境基于* nix,但我想避免使用mod_mono设置ASMX Web服务,只需使用JNA或JNI调用dll即可。这是可能的,有没有人有这样做的好例子?或者最简单的选择是设置WS还是其他一些RPC机制?
答案 0 :(得分:1)
我没有以下任何一种方法的经验,但由于Grails在JVM上运行,这些可能对您有用。我不确定使用Mono会影响你的结果。 jni4net旨在让您轻松地从Java调用.net代码。 另一种选择是使用IKVM作为虚拟机运行Grails应用程序。我不确定这会有多好,因为IKVM不支持标准Java虚拟机的所有功能。有关从Java调用Mono代码的信息,请参阅this link. 对于其他可能的选项,请参阅this question所有这些选项都应该可用,因为Grails在JVM上运行,但使用Mono而不是正常的.net平台可能会导致其他问题。
答案 1 :(得分:0)
我实际上最终做了一些通常我觉得很糟糕的事情,但似乎是最简单的事情。我有一个.Net程序集,我可以将其作为DLL引入我在Mono中运行的.exe文件。我最终将使用来自Codehaus的信息从Grails服务中调用此方法。在我的.Net exe中,我将返回一个字符串到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
我确信这不是理想的,但对于我的项目来说,这似乎是最轻松的方式,而不会破坏应用程序的运行方式。