Frage

Könnten alle diese CORBA-Experten da draußen bitte helfen Sie mir mit diesem.

Ich habe eine Multithread-Anwendung mit einigem Code, der eine Nachricht an einen Server und wartet auf eine Antwort zurück sendet. Ich kann sehen, dass der Server die Antwort zurück aber die Anwendung sendet es muß nicht erhalten zu sein scheint.

Heres Teil meines Codes.

  // 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;

Das Ergebnis ist, dass es Polling sagte immer wieder, auch wenn der Server antwortet. Dies ist ein grundlegender DII Aufruf und teste ich den Code tatsächlich auf ACE / TAO 5.7.9. Dieser genaue Code funktioniert perfekt auf omniORB 4.1.4. Aber ich will das Arbeiten an ACE / TAO wirklich.

War es hilfreich?

Lösung

, um fix Verwaltung von _ptr zu _var Objektverweis zu ändern. Ich schrieb eine kleine Testanwendung, dies zu überprüfen. Nach dem Ändern der Zeiger seine verhaltenden Typ wie die erwarteten Reaktionen dienen. So war das Problem die anfängliche Referenz auf das Interface zu bekommen.

Andere Tipps

Ich bin mir nicht sicher, ob dies aber es scheint mir, dass Sie exit diese Funktion, wenn die erste Abfrageantwort versagt. Wenn Sie dann wieder hereinkommen, werden Sie senden andere Nachricht (mit send_deferred() Anruf), unabhängig von der ersten.

Das bedeutet, dass, wenn Sie es Glück und eine Antwort erscheint schlagen, bevor Sie poll_response() aufrufen, werden Sie immer eine Abfragenachricht erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top