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