Question

Pourraient tous ces experts CORBA là-bas s'il vous plaît me aider avec celui-ci.

J'ai une application multithread avec un code qui envoie un message à un serveur et attend une réponse en retour. Je peux voir que le serveur envoie la réponse au Toutefois, l'application ne marche pas semblent recevoir.

Heres partie de mon code.

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

Le résultat est qu'il ne cesse de dire Polling même si le serveur répond. Ceci est un appel DII de base et je teste en fait le code sur ACE / TAO 5.7.9. Ce code exact fonctionne parfaitement sur omniORB 4.1.4. Cependant, je veux vraiment que cela fonctionne sur ACE / TAO.

Était-ce utile?

La solution

Réussi à résoudre en changeant référence d'objet de _ptr à la chaîne _var. J'ai écrit une petite application de test pour vérifier. Après avoir modifié le type pointeur son comporte comme prévu au service des réponses. Donc, le problème se la référence initiale à l'interface.

Autres conseils

Je ne suis pas sûr de cela, mais il me semble que vous allez exit cette fonction si la première réponse de sondage échoue. Puis, quand vous revenez, vous enverrez autre message (avec l'appel send_deferred()), indépendant du premier.

Cela signifie que, à moins que vous frappez la chance et une réponse apparaît avant d'appeler poll_response(), vous aurez toujours un message d'interrogation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top