Tag: iiop

如何在没有IDL或后期绑定调用远程处理方法的情况下访问CORBA接口

我们一直在使用SAP“COM许可证桥”来访问其许可证服务器并以编程方式查询系统的硬件密钥(以重复使用自己的许可)。 这在SAP Business One版本2007A,2007B和8.8上运行良好,但是在8.81中它们似乎更新了它们的CORBA接口而没有更新COM包装器,因为我们现在在尝试调用GetHardwareKey函数时获得内存exception。 所以我下载了IIOP.NET并开始尝试编写自己的界面。 无论如何我从来都不喜欢COM包装器。 但是我遇到了我的旧远程.NET远程控制 – 无法在服务器和客户端都没有定义公共接口的情况下调用远程方法。 我尝试使用IIOP.NET附带的IDL到CLS编译器,但我继续得到关于接口beign不兼容的错误(SAP没有提供IDL文件)。 我不知道IIOP和CORBA如何确定接口是否兼容。 但我甚至尝试调试IIOP.NET代码并强制它执行该方法尽管不兼容,但收到一个空字符串而不是我想要的硬件密钥。 我的下一步是尝试实现虚假的许可证服务器并检查来自生产客户端的请求,以期确定它们应该是什么样子,但考虑到我遇到的困难,我并不指望取得多大的成功。深入了解.NET远程的内容。 我真正的问题是如何获取或生成SAP Business One硬件密钥,但由此产生的问题包括: 如何反思或查询有关CORBA接口的信息? 我可以使用NamingContext类的list方法来检索可用对象的列表,但我不知道是否有办法查询对象上的可用方法。 我可以在没有接口的情况下动态调用.NET远程处理方法吗? 我看到有一个叫做DII的东西用于动态调用CORBA,但是我没有看到如何在IIOP.NET中使用它。 我可以仅使用委托或不完整的接口来调用.NET远程处理方法吗? 我尝试使用dynamic关键字,但它无法在我的MarshalByRef远程对象上调用一个方法……我认为它说我的MarshalByRef实例上不存在该方法。 我只是通过IIOP.NET尝试过这个(我想知道它是否适用于普通的.NET远程处理)。 如何在.NET远程处理框架中创建或检查Message实例? 我是否可以直接发送或检索远程处理消息,绕过底层代理? 编辑:我设法通过应用RepositoryID属性使IIOP.NET / CORBA相信我有一个兼容的接口: [Ch.Elca.Iiop.Idl.InterfaceType(Ch.Elca.Iiop.Idl.IdlTypeInterface.ConcreteInterface)] [Ch.Elca.Iiop.Idl.RepositoryID(“IDL:LicenseInfo:1.0”)] public interface ILicenseInfo : Ch.Elca.Iiop.Idl.IIdlEntity { void GetHardwareKey(out string hwKey); } 但我仍然得到一个空字符串结果。 编辑2:经过一些更多的实验和调试,我发现响应消息确实包含我正在寻找的数据,但是没有正确地解析成客户端值,可能是因为我的接口定义不好。 希望进一步调试响应处理将帮助我弄清楚如何纠正我的界面。 奇怪的是,它从响应中解析的第一件事是一个空的盒装值,这似乎不适合“out string”参数。 编辑3:我发现我需要将字符串属性应用于这样的参数,以防止它们被视为盒装值: void GetHardwareKey([StringValue(), WideChar(true)] out string hwKey); 但是,尽管有WideChar属性,我对CodeSet不支持WChar或其他东西的错误。 我已经非常接近搞清楚了。 […]