Desde una aplicación cliente, estoy enviando una solicitud/transacción (que contiene una operación para realizar (y parámetros) + ID de transacción) a una cola remota. El servidor remoto dequeue la solicitud en algún momento y toma un tiempo para procesarla.Necesita un mejor diseño para un componente "despachador de rellamada"
Una vez hecho el procesamiento, envía una respuesta en la cola del cliente (que contiene la respuesta aplicativa + el transactionID) ... así que este es un modo de comunicación totalmente "desconectado", la única forma en que el cliente puede mapear la respuesta a la solicitud es a través del transactionID.
La respuesta del mensaje se quita de la cola del lado del cliente y se compara con la solicitud original (en función del transactionID).
Lo que estoy haciendo ahora es que cuando el cliente publica la solicitud en la cola del servidor, agrega una devolución de llamada a un dictionnary manteniendo transactionId y callback (delegado). Este es un Dictionary<int, object>
mapeando una transacciónId a una devolución de llamada para llamar con el resultado de la operación.
Las devoluciones/delegados se almacenan como objetos debido a que dependiendo de la solicitud, la firma del delegado de devolución de llamada es diferente (por ejemplo, una respuesta puede devolver List<string>
mientras que otra respuesta puede devolver int
).
Cuando la cola del cliente dequeue una respuesta, conoce el tipo de respuesta (y por lo tanto la correspondiente firma de la devolución de llamada), por lo tanto obtiene la devolución de llamada del diccionario, en función del transactionID. A continuación, devuelve el objeto al tipo de delegado correspondiente e invoca la devolución de llamada.
Me parece que este enfoque no es muy "sexy", pero realmente no veo otra forma de realizar esa tarea.
¿Hay alguna forma mejor de realizar esto?
Si el problema no es lo suficientemente claro, hágamelo saber y aclarará con algunas ediciones.
posible duplicado de [C#: ¿Está utilizando Aleatorio y OrderBy un buen algoritmo de mezcla?] (Http://stackoverflow.com/questions/1287567/c-is-using-random-and-orderby-a-good-shuffle -algorithm) – Arion