Pregunta

¿Podrían todos esos expertos CORBA por ahí por favor me ayuda con éste.

Tengo una aplicación multiproceso con un código que envía un mensaje a un servidor y espera una respuesta de vuelta. Puedo ver que el servidor envía la respuesta de vuelta sin embargo, la aplicación no se parece a recibirlo.

Aquí está parte de mi código.

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

El resultado es que mantiene diciendo sondeo incluso si responde el servidor. Esta es una invocación básica DII y estoy realmente poniendo a prueba el código de ACE / TAO 5.7.9. Este código exacto funciona perfectamente en omniORB 4.1.4. Sin embargo, lo que realmente quiero que esto funcione en ACE / OAT.

¿Fue útil?

Solución

Managed Para solucionar cambiando referencia de objeto de _ptr a _var. Escribí una pequeña prueba para verificar esto. Después de cambiar el tipo de puntero de su comportarse como se espera servir a las respuestas. Por lo que el problema era conseguir la referencia inicial a la interfaz.

Otros consejos

No estoy muy seguro de esto, pero me parece que se quiere exit esta función si la primera respuesta de sondeo falla. Entonces, cuando se llega de nuevo, se le envía otro mensaje (con la llamada send_deferred()), independiente de la primera.

Esto significa que, a menos que se le golpea aparece afortunados y una respuesta antes de llamar poll_response(), siempre obtendrá un mensaje de consulta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top