Domanda

Potrebbe tutti quegli esperti CORBA là fuori Please help me con questo.

Ho un'applicazione multithread con un po 'di codice che invia un messaggio a un server e attende una risposta indietro. Vedo che il server invia la risposta indietro tuttavia l'applicazione doesnt sembrano riceverlo.

Ecco parte del mio codice.

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

Il risultato è che si continua a dire Polling anche se le risponde di server. Questa è un'invocazione base DII e sto in realtà testando il codice a ACE / TAO 5.7.9. Questo codice esatto funziona perfettamente su omniORB 4.1.4. Tuttavia, voglio davvero che questo lavoro su ACE / TAO.

È stato utile?

Soluzione

riuscito a risolvere cambiando riferimento all'oggetto da _ptr a _var. Ho scritto una piccola applicazione di prova per verificare questo. Dopo aver cambiato il tipo del puntatore suo comportarsi come previsto servire le risposte. Quindi il problema è stato sempre il riferimento iniziale per l'interfaccia.

Altri suggerimenti

Io non sono troppo sicuro di questo, ma a me pare che si vuole exit questa funzione se la prima risposta sondaggio fallisce. Poi, quando torni in, si inviano un altro messaggio (con la chiamata send_deferred()), indipendente dal primo.

Ciò significa che, a meno che lo sciopero appare fortunati e una risposta prima di chiamare poll_response(), otterrete sempre un messaggio di polling.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top