私は 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" はポート番号を表す int です。これらの値は現在、サーバーに接続するために他のシステムで使用されているため、正しいことを確認できます。
ただし、トレーダー サービスに接続しようとすると、実行時に例外が発生します。これを行うために使用するコードは次のとおりです。
// 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。」
これは無効なオブジェクト参照を示唆しているように見えますが、それはどういう意味ですか? resolve メソッドに渡す文字列の形式が正しくありませんか? 他のシステムで使用されているように、このサービスにさまざまな名前を付けてみましたが、常に同じエラーが発生するため、正しく解釈しているかどうかさえ疑問に思います。
ちなみに、必死になって、IOR からオブジェクト参照を取得しようとしましたが、これも別の例外 (つまり、omg.org.CORBA.ORB_package.InvalidName) をスローします。
OrbServices orb = OrbServices.GetSingleton();
object obj = orb.resolve_initial_references(traderIOR);
どんなアドバイスでも大歓迎です。