问题标签 [iiop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
8861 浏览

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

我们一直在使用 SAP“COM 许可证桥”来访问他们的许可证服务器并以编程方式查询系统的硬件密钥(无需自己的许可即可重用)。这在 SAP Business one 版本 2007A、2007B 和 8.8 上运行良好,但在 8.81 中,他们似乎更新了他们的 CORBA 接口而没有更新 COM 包装器,因为我们现在在尝试调用 GetHardwareKey 函数时遇到内存异常。

所以我下载了 IIOP.NET 并开始尝试编写自己的界面。反正我从不喜欢那个 COM 包装器。但是我遇到了 .NET 远程处理的老对手——如果没有在服务器和客户端中定义的公共接口,就无法调用远程方法。我尝试使用 IIOP.NET 中包含的 IDL 到 CLS 编译器,但我继续收到有关接口不兼容的错误(SAP 没有提供 IDL 文件)。我不知道 IIOP 和 CORBA 如何确定接口是否兼容。但我什至尝试调试 IIOP.NET 代码并强制它执行该方法,尽管不兼容,但收到一个空字符串而不是我想要的硬件密钥。

我的下一步是尝试实现一个假许可证服务器并检查来自生产客户端的请求,以期确定它们应该是什么样子,但考虑到我遇到的困难,我并不指望取得多大成功已经窥探了 .NET 远程处理的内部结构。

我真正的问题是如何获取或生成 SAP Business One 硬件密钥,但由此产生的问题包括:

  1. 如何反映或查询有关 CORBA 接口的信息?我可以使用 NamingContext 类的 list 方法来检索可用对象的列表,但我看不到是否有办法查询对象上的可用方法。
  2. 我可以在没有接口的情况下动态调用 .NET 远程处理方法吗?我看到有一个名为 DII 的东西用于动态调用 CORBA,但我看不到如何从 IIOP.NET 使用它。
  3. 我可以仅使用委托或不完整的接口调用 .NET 远程处理方法吗?我尝试使用 dynamic 关键字,但它无法在我的 MarshalByRef 远程对象上调用方法......我认为它说我的 MarshalByRef 实例或其他东西上不存在该方法。不过,我只通过 IIOP.NET 尝试过(我想知道它是否适用于普通的 .NET 远程处理)。
  4. 如何在 .NET 远程处理框架中创建或检查 Message 实例?
  5. 我可以绕过底层代理直接发送或检索远程消息吗?

编辑:我设法通过应用 RepositoryID 属性使 IIOP.NET / CORBA 相信我有一个兼容的接口:

但我仍然得到一个空字符串结果。

编辑2:经过更多的实验和调试,我发现响应消息确实包含我正在寻找的数据,但没有正确解析为客户端值,可能是因为我的接口定义错误。希望进一步调试响应处理将帮助我弄清楚如何更正我的界面。奇怪的是,它从响应中解析的第一件事是一个空框值,这对于“输出字符串”参数似乎不正确。

编辑3:我发现我需要将字符串属性应用于这样的参数,以防止它们被视为装箱值:

但是,尽管有 WideChar 属性,但我收到关于 CodeSet 不支持 WChar 或其他东西的错误。我真的很接近弄清楚这一点。

编辑 4:我对如何为 WChar 设置代码集感到困惑。如果我没有设置它,我会收到一个错误:“WChar Codeset 要么未指定或不受支持。” 因为服务器返回了一个 unicode 字符串而没有覆盖默认字符集。我找不到任何方法可以从客户端覆盖它。我试着打电话:

但这似乎对客户端没有任何影响。示例代码显示在服务器端调用它。但是我没有写服务器,所以我无法控制它。为了我自己的目的,我唯一的选择是重写 IIOP.NET 代码以强制默认 WChar CodeSet 生效吗?

0 投票
1 回答
759 浏览

c# - 如何从 CORBA 客户端为 WChar 字符串指定 CodeSet

这个问题与我一直在努力的另一个问题有关: How to access CORBA interface without IDL or late-bound invoke remoting methods

我真的很难过如何克服这个关于未指定 CodeSet 的错误。我一直在追踪 IIOP 代码,试图弄清楚如何指定 CodeSet,看起来它可以使用与配置文件关联的标记组件来指定。由于不熟悉 CORBA,我不知道标记组件是什么或配置文件是什么或如何控制它们,但我怀疑它可能会受到创建可移植对象拦截器的影响,此时我可以添加一个标记的 CodeSet配置文件的组件,如果这意味着什么。我只是从 IIOP.NET 代码和 Google 中学到的东西。

有人可以帮我理解并希望控制它吗?如果服务器是一个黑匣子,我需要编写一个客户端来调用一个输出字符串的方法,我如何告诉 IIOP.NET 使用什么 WChar CodeSet,这样它就不会给我一个关于它未指定的错误。我从客户端尝试了 OverrideDefaultCharSets,但这似乎没有任何效果。该函数的 IIOP 示例代码显示它在服务器端使用。

0 投票
2 回答
501 浏览

java - RMI IIOP 客户端对象作为回调

我正在尝试构建 rmi-iiop 应用程序(非常简单的聊天)。我需要服务器能够与客户端通信,所以我的想法是创建连接用户的界面:

然后在客户端使用服务器可以执行的方法创建用户类('receiveMessage'):

我使用rmic -iiop Chat User生成_Chat_Tie.class _ChatInterface_Stub.class _User_Tie.class _UserInterface_Stub.class

将所有文件放在服务器端和客户端并运行应用程序后,出现以下错误: java.rmi.StubNotFoundException: Stub class not found: User_Stub; nested exception is:

我想这里的区别是聊天类是在服务器上创建的,然后客户端使用接口使用它(效果很好),但是用户类必须在客户端创建,所以客户端部分作为服务器工作。

我的问题类似于Java RMI - Making the client a server but for rmi-ioop implementation。

所以说起来 - 我如何将本地对象引用发送到服务器,以便它可以对其执行操作?

谢谢!莱昂蒂

0 投票
2 回答
4119 浏览

java - 从远程 GlassFish 服务器接收 JMS 消息

我正在尝试从 GlassFish (2.1) 服务器远程接收 JMS 消息。我已按照此处的说明进行操作: http: //www.tidytutorials.com/2009/06/jms-example-using-glassfish-and-remote.html以及此处:http ://www.novell.com/documentation/ extend52/Docs/help/MP/jms/tutorial/pointToPoint-1.htm 但它似乎不起作用。

我创建了 QueueConnectionFactory sampleFactory 和 Queue sampleQueue 用于测试。

我使用以下代码发送消息:

我的客户正在使用以下代码:

它似乎能够正确连接,因为我添加了一些日志记录以查看队列和工厂是否都正常,并且它们是。如果我更改队列或工厂的名称,我会收到错误消息,因此可以按预期工作。

但是,实际上无法接收消息是行不通的。他们似乎可以发送出去,但他们永远不会到达客户那里。

有没有人对可能出了什么问题有任何想法?

谢谢!

编辑:哦,我正在使用 GlassFish 的内置 JMS 提供程序。

0 投票
1 回答
664 浏览

.net - CORBA IIOPNet 和 OmniORBpy,带有值类型参数的远程方法调用问题

我的范围:我正在尝试为两个应用程序创建一个 CORBA 解决方案,一个在 .NET 端(服务器),另一个在 python(客户端)。我使用 IIOPNet 生成服务器和 IDL,使用 OmniORBpy 生成存根和客户端调用。通常适用于简单的调用,例如典型示例:Adder。但是,当 ai 尝试使用自定义类调用方法时,它不起作用。

我在服务器端有这个类(我的删除对象)要从客户端调用:

输入参数类类型在服务器端声明如下(非常简单):

我使用 CLSIDLGenerator 生成我的 IDL,然后使用我的 python 存根(如“omniidl -bpython -CPython ...”),直到这里一切正常。

所以我启动服务器(VS调试环境),现在在我的客户端代码上我解析服务名称,我成功缩小了我的远程对象并创建了我的请求对象但是当我尝试这样做时:

Python 在没有任何警告、没有例外、任何类型的消息的情况下爆炸,(我将omniORB 配置文件上的跟踪标签更新为最高 [40] 但没有被跟踪),它只是崩溃了,我尝试了很多东西我总是得到相同的结果。问题当然与参数有关(我猜)。

我正在像这样运行客户端: python client.py -ORBInitRef NameService=corbaname::localhost:8087

(我的最后一种方法:python 对象参考架构和按值传递的符合值类型参数在某些时候不匹配)

技术细节:NET 4.0、IIOPNet(最后)、Python 2.6、omniORB-4.1.5、omniORBpy-3.5。

感谢您的每一个帮助,我对此有点坚持,谢谢。


是的,为 MyRemoteObject 生成的 IDL 是这个:.....

......

但是既然您提到了这一点,我只是注意到在同一个文件(myRemoteObject.idl)上,我有一个表示 InterfaceRequest 类型的结构,但像这样为空:

当然,我会在其他地方生成具有正确内容的 IDL:

奇怪,也许是我生成这些东西的顺序,这很重要吗?,显然这里有问题,对吧?

最后,我的这两个类(远程和参数类型)的 python 存根看起来像这样:

和接口请求:

因此,即使最终 IDL 不太正确(只是猜测),python 存根也会生成正确的内容和正确的路径。

感谢您的帮助(我已更改真实姓名,希望 id 无关紧要)并且对这么大的帖子感到抱歉。

0 投票
1 回答
341 浏览

glassfish - 移至 Glassfish-2.x 集群会导致连接在 1 小时后超时

我们最近从 Glassfish-2.x 非集群环境迁移到 Glassfish-2.x 集群环境。部分移动包括使用 RMI over IIOP,而不是连接到静态服务器。一切都很好,除了当我们的客户端应用程序空闲超过一个小时时,与服务器的连接被服务器终止,阻止我们进行任何查找。我们想知道如何使连接保持几个小时。操作系统设置为保持连接打开 2 小时 (/proc/sys/net/ipv4/tcp_keepalive_time)。Glassfish 中是否为 IIOP 上的连接设置了超时限制,如果有,我该如何更改?

0 投票
2 回答
652 浏览

ejb - Websphere 6.1:使用 IIOP 的多个单元调用中的问题

在以下问题上需要一些帮助

我们有 2 台机器,每台机器都安装了 2 个 websphere 单元。机器 1(X1 和 X2 单元) 机器 2(Y1 和 Y2 单元)

我们在 X1 单元上安装了 Web 应用程序,该单元具有 EJB 客户端组件,它调用安装在 4 个单元(即 X1、X2、Y1 和 Y2)中的每一个上的 EJB 组件上的业务方法。EJB 客户端组件使用 IIOP URL 查找,使用 InitalContext 类查找 home 接口。

EJB 客户端组件与 B1 和 B2 的通信正常进行,没有任何问题。但是与 X2 单元的通信不能正常进行(在日志中没有看到任何主接口查找问题),它以某种方式调用 X1 服务器本身的业务方法。

我们有一个普通的 Java 客户端,它使用main()方法来调用所有四个服务器。此设置已在生产中运行了 2 年。但是问题开始了,因为我们在 Web 应用程序中移动了调用四个服务器的逻辑,而不是 main()。

X1 和 X2 在同一台物理机上有何不同?

0 投票
1 回答
628 浏览

java - 如何通过互联网调试 RMI/IIOP?

我有一个客户端/服务器应用程序,它通过 JNDI/RMI/IIOP 在客户端使用一些 Glassfish 客户端代码(未打包为 Glassfish 客户端)和在服务器端使用 Glassfish 实例进行通信。

我有一些 Glassfish 多模式脚本,用于确保我在任何机器上创建的域完全相同且配置正确。

在本地网络上使用该脚本,我已经确保我可以从我机器上的客户端代码访问远程 Glassfish 服务器实例(这是一个非常合理的猜测,但是我倾向于测试所有我不完全确定的东西)。

下一步是让该客户端/服务器应用程序在(我应该说“通过”)互联网上运行:我的客户端代码在我的公司 LAN 中(换句话说,在我的机器上)和我的服务器代码在运行我的 Glassfish 的 Amazon VM 上服务器。由于某些原因,远程 Glassfish 正在 Windows VM 上运行。

显然(当我问这个问题时,你可以放心地猜测通过互联网测试不起作用。你是对的。

因此,为了进行更多猜测,我在我的机器和服务器上都启动了SmartSniffer 。

在我的机器上,我只能看到一个 TCP 数据包发送到该服务器实例(并且没有任何返回)。

在服务器实例上,我可以看到一个数据包进入(客户端查询)和一个数据包退出(服务器应答)。该服务器答案如下所示:

[4/4/2012 11:47:13 AM:917] GIOP.......(......NameService......._is_a... ................NEO..........(IDL:omg.org/SendingContext/代码库:1.0............n............172.27.63.145.Ô2......¯«Ë............e...... ……………………………………………………………………………………………………………………………………………………………………………… .....&................(IDL:omg.org/CosNaming/NamingContext:1.0.

那个 172.27.63.145 地址是我在本地网络中的 IP。

[4/4/2012 11:47:13 AM:917] GIOP.......2............NEO...... ...0.......(IDL:omg.org/SendingContext/CodeBase:1.0............ô........46.137.114.## #.'5....¯«Ë........d........................ ………………&…………!……|…… .....$... ...f............10.241.42.###.'6.@...... ..g........g........默认.........g.... ......+IDL:omg.org/CosNaming/NamingContextExt:1.0......¢.......10.241.42.208。 '5...M¯«Ë.... ...d... S1AS-ORB.........RootPOA.... TNameService......... ……………………………………………………………………………………………………………………………………………………………………………… ……&……

那 46.137.114.### 是我的 Amazon VM 的外部 IP,而 10.241.42.### 是它在亚马逊魔法虚拟服务器中的内部 IP。

所以看起来服务器正在回答,不是吗?

但是这个答案永远不会在我的网络中找到我的机器。

那么......我怎样才能检查它在哪里丢失?似乎数据包嗅探器已经完成了它的工作,但我现在能做什么?

注意这个问题是对“如何通过 NAT 将 glassfish 客户端连接到 glassfish 服务器?”的澄清。

0 投票
1 回答
230 浏览

corba - 不同语言之间的 Corba 通信

CORBA IDL 如何用于支持以不同语言实现的对象之间的通信?

0 投票
1 回答
323 浏览

rmi - RMI IIOP 可以调用 RMI(JRMP) 服务器吗?

RMI IIOP 可以调用 RMI (JRMP) 服务器吗?

我知道 RMI IIOP 用于使用 corba 进行跨语言通信,但是 RMI IIOP 客户端可以调用使用 JRMP 实现的 RMI 服务器吗?

我猜这可以通过使用 RMI (JRMP) 注册表主机的 IP 地址来实现。