このトピックでは、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中にエラー メッセージが受信されます。 それ以外の場合、アクティビティと転送は前のシナリオと似ています。
エラーを伴う/伴わない非同期一方向要求/応答
応答またはエラーはクライアントに返されません。