クライアントアプリケーションから、(および(パラメータ)を実行するための操作とパラメータを含む)+トランザクションIDをリモートキューに送信しています。リモートサーバーは要求をある時点でデキューし、処理に時間がかかります。"コールバックディスパッチャ"コンポーネントのためのより良いデザインが必要
処理が完了すると、クライアントキュー(アプリケーション応答+トランザクションIDを含む)で応答が送信されます。これは、クライアントがマップできる唯一の方法である完全に「切断」通信モードです要求に対する応答はtransactionIDを介して行われます。
メッセージ応答はクライアント側でデキューされ、(transactionIDに基づいて)元の要求と一致します。
私が今やっていることは、クライアントがリクエストをサーバーキューにポストすると、transactionIdとコールバック(デリゲート)を保持している辞書にコールバックを追加することです。これは、トランザクション結果をコールバックするコールバックにトランザクションIDをマッピングするDictionary<int, object>
です。
コールバック/デリゲートは、要求に応じてコールバック代理人の署名が異なるため、オブジェクトとして格納されます(たとえば、応答がList<string>
を返し、別の応答がint
を返す可能性があります)。
クライアントキューはレスポンスのデキュー時に、応答のタイプ(したがってコールバックの対応するシグニチャ)を認識します。したがって、transactionIDに基づいてディクショナリからコールバックを取得します。次に、オブジェクトを対応するデリゲート型にキャストし、コールバックを呼び出します。
私はこのアプローチがあまりセクシーではないが、私は実際にそのようなタスクを実行する別の方法を見ていない。
これを実行する方法はありますか?
問題が十分に解明されない場合は、私に知らせてください。
[C#:RandomとOrderByは良いシャッフルアルゴリズムを使用していますか?](http://stackoverflow.com/questions/1287567/c-is-using-random-and-orderby-a-good-shuffleアルゴリズム) – Arion