Pregunta

Yo uso Microsoft RPC para comunicaciones entre procesos.Tengo una interfaz con un conjunto de métodos que aceptan un byte de tubería "en" parámetro (IDL descripción):

[
    uuid(ActualGuidHere), 
    version(1.0), 
    pointer_default(unique)
]

interface IMyInterface
{
    //other irrelevant methods here
    error_status_t rpcDoAction( [in] pipe byte params );
    //more irrelevant methods here
}

cada de vez en cuando invoco tales métodos en un lado del cliente a través de un cliente stub generado por MIDL y delegadas a NdrClientCall2(), no alcanza para el lado del servidor, pero NdrClientCall2() devuelve RPC_S_ALREADY_LISTENING ("El servidor está a la escucha"), que es realmente confuso.

He añadido el registro en las funciones usadas para la inserción/extracción de las operaciones durante la transferencia - que no son llamados por las llamadas que no de esta manera.Esto implica que la transmisión es ni siquiera ha comenzado.

Yo nunca encuentro tal comportamiento a la hora de llamar a los métodos que no tienen tuberías como parámetros.

¿Cuál podría ser el motivo y la solución?

¿Fue útil?

Solución

La documentación parece bastante mínima - no creo que hay una enorme comunidad de usuarios para directa el uso de la RPC Api - pero mi conjetura es que, en el fin de establecer el parámetro de la tubería, es necesario para que RPC internamente llamada RpcServerListen.Sólo una llamada a la API es capaz de bloquear en un momento.

El hecho de que usted vea el problema sólo de vez en cuando sugiere que es tiempo, así que es posible que se están haciendo dos de esas llamadas en diferentes hilos, y a veces será simultánea?

O eso, o hay un tiempo relacionados con error en la RPC de la biblioteca de la aplicación y usted tendrá que trabajar alrededor de ella por volver a intentar la llamada (que puede ser una solución efectiva en cualquier caso).

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