3
    String[] orbargs= {};
    org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(orbargs, null);
    org.omg.CORBA.Object cobj = orb.string_to_object("corbaloc:iiop:10.1.1.200:6969/OurServiceHelper");
    _OurServiceHelper cpsh = _OurServiceHelperHelper.narrow(cobj); // Get's stuck
    cpsh.ourMethod();

その狭さはただぶら下がっています。

私のサービスは、静的ポートで実行するようにセットアップされています。通常は NamingService を介して検索するため、機能することはわかっています。

私は何を間違っていますか?

4

3 に答える 3

1

NamingService を使用している場合は、実際には、corbaloc URL ではなく、corbaname URL を使用する必要があります。以下は、ネーム サービスがポート 6969 にある場合に機能します。サーバー オブジェクトは、NamingService によって返される ior に埋め込まれているため、指定する必要はありません。

"corbaname:10.1.1.200:6969#OurServiceHelper"

Re: コメント: 最初に、IOR とオブジェクトの提供に関するメモ。提供されたオブジェクトをプロセスの再起動後も持続させたい場合PERSISTENTは、オブジェクトを含む POA でライフタイム ポリシーを設定する必要があります。また、IOR にはサーバーの IP とポートが組み込まれているため、再起動後も一貫した IOR を生成したい場合は、静的 IP とポート番号を使用し、永続的なライフタイム ポリシーを使用する必要があります。

ネームサービスを使用すると、このような多くのことを心配する必要がなくなり、作業が簡単になります。ネーム サービスが既知の場所で到達可能である限り、すべてのサーバー オブジェクトはインスタンス化されたときにネーム サービスに登録するだけで済み、クライアントはそれらの場所を知らなくてもアクセスできます。

ネーム サービスを使用しないことに決めた場合は、コードを多少変更する必要があります。URLを使用する場合corbalocは、Interoperable Naming Service (INS) を使用しています。http://java.sun.com/j2se/1.4.2/docs/guide/idl/INStutorial.htmlを参照してください。INS を使用して、オブジェクトの機能を使用する必要がありNamingContextExtます。具体的には、作成した colabloc URL を解決するには、NamingContextExt::resolve_str関数を呼び出して URL を渡す必要があります。

于 2010-05-26T15:59:26.317 に答える
0

corbaloc には型情報が含まれていないため、ORB はリモート呼び出し (_is_a) を行うことによって、絞り込んでいる型をチェックしています。_is_a を呼び出さない未チェックのナローを使用してみてください。

_OurServiceHelper cpsh = _OurServiceHelperHelper.narrow(cobj);

_is_a 呼び出しが返されないのは奇妙です。私の推測では、unchecked_narrow は機能しますが (null 以外の結果が得られます)、オブジェクト参照は機能しません。

于 2010-06-20T05:04:27.240 に答える
0

The key part of the corbaloc URL (string after the slash), could possibly be incorrect or not registered correctly, and the serverside orb isn't able to map the key to the object reference.

How are you running the server?

This should work:

<server> -ORBInitRef OurServiceHelper="file://server.ior"

So when the corbaloc request comes in the orb should be able to match the key to the ior and return you the ior. Different ORB's have different ways of doing this for registering an initial reference, TAO have a propriety interface called IORTable for example.

于 2010-06-03T14:26:09.267 に答える