如何使用 C# 和 IIOP.NET 查找 Corba 服务
本文关键字:查找 Corba 服务 NET IIOP 何使用 | 更新日期: 2023-09-27 18:34:42
我正在为 Corba 服务器编写一个 C# 客户端,我正在使用 IIOP.NET,按照以下页面上的示例进行操作:http://iiop-net.sourceforge.net/rmiAdderDNClient.html
我已经走到了这一步,没有错误:
// Register channel
IiopClientChannel channel = new IiopClientChannel();
ChannelServices.RegisterChannel(channel, false);
// Access COS naming context
CorbaInit init = CorbaInit.GetInit();
NamingContext context = init.GetNameService(host, port);
变量"host"是具有服务器计算机名称的字符串,"port"是表示端口号的整数。这些值当前由其他系统用于连接到服务器,因此我可以确认它们是否正确。
但是,尝试连接到交易者服务会在运行时产生异常。这是我用来执行此操作的代码:
// Looking up VB Trader
NameComponent[] names = new NameComponent[] { new NameComponent("TraderInterface") };
object obj = context.resolve(names);
这是我收到的错误消息:
"CORBA 系统异常:omg.org.CORBA.INV_OBJREF,已完成:Completed_No次要:10102。">
这似乎表明对象引用无效,但这是什么意思?我传递给解析方法的字符串格式不正确?我已经为这项服务尝试了许多其他系统中使用的不同名称,但我总是收到相同的错误,这让我怀疑我是否正确地解释了它。
顺便说一下,在绝望中,我也试图从 IOR 获取对象引用,但这再次抛出了一个不同的异常(即omg.org.CORBA.ORB_package。无效名称(。
OrbServices orb = OrbServices.GetSingleton();
object obj = orb.resolve_initial_references(traderIOR);
欢迎任何建议。
我永远无法使用上述任何方法访问我的服务器,但是以下代码最终使通信正常工作:
Hashtable props = new Hashtable();
props[IiopChannel.BIDIR_KEY] = true;
props[IiopServerChannel.PORT_KEY] = port;
// register corba services
IiopChannel channel = new IiopChannel(props);
ChannelServices.RegisterChannel(channel, false);
MyInterface obj = (MyInterface)RemotingServices.Connect(typeof(MyInterface), ior);
我不完全确定为什么我必须使用这种(看似(非常规的方式。也许是由于服务器上缺少运行命名服务。不管是什么原因,我希望这对那里的某人有所帮助。