このトピックでは、HTTP、TCP、または名前付きパイプを使用するマルチスレッド要求を使用して、さまざまな非同期要求/応答シナリオのアクティビティと転送について説明します。
非同期要求/応答 (エラーなし)
このセクションでは、マルチスレッド クライアントを使用した非同期要求/応答シナリオのアクティビティと転送について説明します。
呼び出し元のアクティビティは、 beginCall
が返されると終了し、 endCall
が返されます。 コールバックが呼び出されると、コールバックが返されます。
呼び出されたアクティビティは、 beginCall
が返されたとき、 endCall
が返されたとき、またはコールバックがそのアクティビティから呼び出された場合にコールバックが返されるときに終了します。
コールバックなしの非同期クライアント
HTTP を使用して両方の側で伝達を有効にする
propagateActivity=true
場合、ProcessMessage は転送先の ProcessAction アクティビティを示します。
HTTP ベースのシナリオでは、ReceiveBytes は送信する最初のメッセージで呼び出され、要求の有効期間中存在します。
HTTP を使用して両側で伝達が無効になっている
どちらの側 propagateActivity=false
場合、ProcessMessage は転送先の ProcessAction アクティビティを示しません。 そのため、新しい ID を持つ新しい一時的な ProcessAction アクティビティが呼び出されます。 非同期応答が ServiceModel コードの要求と一致すると、アクティビティ ID をローカル コンテキストから取得できます。 実際の ProcessAction アクティビティは、その ID で転送できます。
HTTP ベースのシナリオでは、ReceiveBytes は送信する最初のメッセージで呼び出され、要求の有効期間中存在します。
プロセス アクション アクティビティは、呼び出し元または呼び出し先で propagateActivity=false
するとき、および応答メッセージに Action ヘッダーが含まれていない場合に、非同期クライアントで作成されます。
TCP または名前付きパイプを使用して、両側で伝達が有効になっている
Named-Pipe または TCP ベースのシナリオでは、ReceiveBytes はクライアントを開いたときに呼び出され、接続の有効期間中存在します。
最初の画像と同様に、 propagateActivity=true
場合、ProcessMessage は転送先の ProcessAction アクティビティを示します。
TCP または名前付きパイプを使用して、両側で伝達が無効になっている
Named-Pipe または TCP ベースのシナリオでは、ReceiveBytes はクライアントを開いたときに呼び出され、接続の有効期間中存在します。
2 番目の画像と同様に、どちらの側でも propagateActivity=false
場合、ProcessMessage はどの ProcessAction アクティビティに転送するかを示しません。 そのため、新しい ID を持つ新しい一時的な ProcessAction アクティビティが呼び出されます。 非同期応答が ServiceModel コードの要求と一致すると、アクティビティ ID をローカル コンテキストから取得できます。 実際の ProcessAction アクティビティは、その ID で転送できます。
コールバックを使用した非同期クライアント
このシナリオでは、コールバックと endCall
のアクティビティ G と A'、およびその転送の入出力が追加されます。
このセクションでは、 propagateActivity
=true
での HTTP の使用のみを示します。 ただし、追加のアクティビティと転送は、他のケースにも適用されます (つまり、TCP または Named-Pipeを使用して propagateActivity
=false
)。
クライアントがユーザー コードを呼び出して結果の準備ができたことを通知すると、コールバックによって新しいアクティビティ (G) が作成されます。 その後、ユーザー コードは、コールバック内 (図 5 に示すように) またはコールバックの外部で endCall
を呼び出します (図 6)。 どのユーザー アクティビティ endCall
から呼び出されているかは不明であるため、このアクティビティには A’
ラベルが付けられます。 A' は A と同じでも、A と異なる場合もあります。
コールバックを使用した非同期サーバー
チャネル スタックは、メッセージ受信時にクライアントを呼び出します。この処理のトレースは、ProcessRequest アクティビティ自体に出力されます。
非同期要求/エラー付き応答
エラー メッセージ エラーは、 endCall
中に受信されます。 それ以外の場合、アクティビティと転送は前のシナリオと似ています。
エラーありまたはエラーなしの非同期 One-Way
応答またはエラーはクライアントに返されません。