难道所有这些CORBA专家那里请帮我这一个。

我有一些代码,将消息发送到服务器,并等待响应回多线程应用程序。我可以看到,服务器发送回响应然而似乎不接收它的应用程序。

下面有我的代码部分。

  // 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的工作。

有帮助吗?

解决方案

通过从_ptr改变到_var对象引用设法解决。我写了一个小的测试应用程序来验证这一点。改变指针类型的表现为预期的服务的响应后。所以,问题是越来越初始参考到接口上。

其他提示

我也不太清楚这个,但在我看来,你会的退出的这个功能,如果第一轮询响应失败。然后,当你回来时,你会发的其他的消息(与send_deferred()调用),独立于第一。

这是,除非你越打越幸运和反应似乎你打电话之前poll_response()手段,您总能获得一个轮询消息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top