質問
でしたそこにすべてのそれらのCORBAの専門家この1で私を助けてくださいます。
Iは、応答バックのためにサーバと待機にメッセージを送信し、いくつかのコードでマルチスレッドアプリケーションを有しています。私は、サーバーがバックただし、アプリケーションがそれを受け取るように見えるdoes notの応答を送っていることが確認できます。
HERESに私のコードの一部ます。
// Create a request object for the given message
msg.request = serverRef->_request("receiveCoreMessageVia");
msg.request->set_return_type (CORBA::_tc_short);
msg.request->add_in_arg() <<= msg.sourceGateway;
msg.request->add_in_arg() <<= msg.octetSeq;
msg.request->send_deferred();
...
// The following code is in a while loop in a different function. It uses the request reference to check the response.
// Check if the request has completed
if (!msg->request->poll_response())
{
clssendlog << debug << "Polling..." << endl;
return false; // No response yet
}
// Get the returned result
clssendlog << debug << "Get response..." << endl;
msg->request->get_response();
clssendlog << debug << "Reading the returned response value" << endl;
CORBA::Short tmp = 0;
msg->request->return_value () >>= tmp;
結果は、サーバが応答する場合でも、ポーリングを言い続けていることです。 これは、基本的なDII呼び出しであり、私は実際にACE / TAO 5.7.9のコードをテストしています。この正確なコードはomniORBの4.1.4に完璧に動作します。しかし、私は本当にACE / TAOの仕事にこれをしたい。
解決
_varに_ptrからオブジェクト参照を変更することによって修正することができました。私はこれを確認するための小さなテストアプリケーションを書きました。応答を提供する期待通りのポインタを変更した後にその挙動するを入力します。だから問題は、インタフェースへの初期参照を取得してます。
他のヒント
私もわからこの程度ではないんですが、最初のポーリング応答が失敗した場合、それはあなたがの終了のこの機能することを私には見えます。次に、あなたが戻ってきたときに、あなたが送りますの最初から独立した別ののメッセージ(send_deferred()
呼び出しで)、ます。
あなたはそれを打つ場合を除き、ということを意味幸運と応答それはあなたがpoll_response()
を呼び出す前に、あなたは常にポーリングメッセージが表示されます表示されます。
所属していません StackOverflow