2009-03-05 64 views
1

我在C#中有一个应用程序,它目前对LDAP进行身份验证。我们希望扩展功能以支持IBM的Tivoli Access Manager,它由策略服务器和LDAP服务器(以及其他模块)组成。不幸的是,用LDAP服务器为我们的客户进行身份验证是不可接受的,因此我们必须将其与策略服务器绑定。C#Interop与C vs Interop与Java:哪个更好/更容易/更快?

谭的策略服务器有2个API进行身份验证,一个用Java,以及一个用C

我的问题:什么是C#更好的语言互操作,C或Java?

请注意:可维护性和开发成本。

感谢大家提前。

回答

2

在我看来,C是C#与其互操作的简单语言,因为在.NET中有一个本地接口允许“不安全”访问。为了与Java通信,你必须通过JNI去进入Java,或者使用J#,否则跳过箍环从C#到Java进行通信并返回。

我还没有做过任何C#Java通信(除了穿过套接字或跨Web服务),但我在一个团队使用JNI通过C++代码从Java通信到COM。我们最终不得不扔掉JNI解决方案太笨拙。我们在C#中重写了C++组件,并使用一个钉住的套接字来在这两个组件之间进行通信。这非常棒。

从这个经验来看,如果您已经在使用C#,那么我会使用C#中的C API。这很容易做到。

1

过去,我用Managed C++/CLI与C/C++接口取得了很好的成功,但在与java接口方面却说不上多少。

此外,如果你要直C,你可以直接将函数调用导出到C#。

0

我认为你正在接口的API只不过是一个API。一个前端是Java,另一个是C,但你可能没有与Java代码交互,可能只是C.

这就是说,我认为这将是任何接口看起来更简单。我猜C是,但如果有一些很棒的Java绑定软件可以让C#轻松访问Java库,那可能会更好。

很可能它们都链接到API下的C代码。

0

我喜欢埃迪的回答,但我会用这个观察来调和它 - 这取决于你在家里的技能。如果你有一堆Java专业人员,那么使用Java是有道理的。如果你有一群C程序员,那么chouice是显而易见的。

虽然另一个评论:你确定TAM doesn't do .NET

0

我是jni4net的作者,是JVM和CLR之间的开源内部网桥。它建立在JNI和PInvoke之上。

0

您不应该在C#和C或Java之间进行任何桥接。正如Cheeso所引用的,TAM现在已经有了一个支持的.NET API - 请参阅here以获取信息。