次の方法で共有


HTTP、TCP、または Named-Pipe を使用した非同期シナリオ

このトピックでは、HTTP、TCP、または名前付きパイプを使用するマルチスレッド要求を使用して、さまざまな非同期要求/応答シナリオのアクティビティと転送について説明します。

非同期要求/応答 (エラーなし)

このセクションでは、マルチスレッド クライアントを使用した非同期要求/応答シナリオのアクティビティと転送について説明します。

呼び出し元のアクティビティは、 beginCall が返されると終了し、 endCall が返されます。 コールバックが呼び出されると、コールバックが返されます。

呼び出されたアクティビティは、 beginCall が返されたとき、 endCall が返されたとき、またはコールバックがそのアクティビティから呼び出された場合にコールバックが返されるときに終了します。

コールバックなしの非同期クライアント

HTTP を使用して両方の側で伝達を有効にする

両方の側で propagateActivity が true に設定されているコールバックのない非同期クライアント。

propagateActivity=true場合、ProcessMessage は転送先の ProcessAction アクティビティを示します。

HTTP ベースのシナリオでは、ReceiveBytes は送信する最初のメッセージで呼び出され、要求の有効期間中存在します。

HTTP を使用して両側で伝達が無効になっている

どちらの側 propagateActivity=false 場合、ProcessMessage は転送先の ProcessAction アクティビティを示しません。 そのため、新しい ID を持つ新しい一時的な ProcessAction アクティビティが呼び出されます。 非同期応答が ServiceModel コードの要求と一致すると、アクティビティ ID をローカル コンテキストから取得できます。 実際の ProcessAction アクティビティは、その ID で転送できます。

コールバックのない非同期クライアント。どちらの側でも propagateActivity が false に設定されています。

HTTP ベースのシナリオでは、ReceiveBytes は送信する最初のメッセージで呼び出され、要求の有効期間中存在します。

プロセス アクション アクティビティは、呼び出し元または呼び出し先で propagateActivity=false するとき、および応答メッセージに Action ヘッダーが含まれていない場合に、非同期クライアントで作成されます。

TCP または名前付きパイプを使用して、両側で伝達が有効になっている

コールバックのない非同期クライアント。この場合、propagateActivity が両側で true に設定され、名前付きパイプ/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 で転送できます。

コールバックのない非同期クライアント。どちらの側でも、名前付きパイプ/TCP で propagateActivity が false に設定されています。

コールバックを使用した非同期クライアント

このシナリオでは、コールバックと endCallのアクティビティ G と A'、およびその転送の入出力が追加されます。

このセクションでは、 propagateActivity=trueでの HTTP の使用のみを示します。 ただし、追加のアクティビティと転送は、他のケースにも適用されます (つまり、TCP または Named-Pipeを使用して propagateActivity=false)。

クライアントがユーザー コードを呼び出して結果の準備ができたことを通知すると、コールバックによって新しいアクティビティ (G) が作成されます。 その後、ユーザー コードは、コールバック内 (図 5 に示すように) またはコールバックの外部で endCall を呼び出します (図 6)。 どのユーザー アクティビティ endCall から呼び出されているかは不明であるため、このアクティビティには A’ラベルが付けられます。 A' は A と同じでも、A と異なる場合もあります。

コールバックを持つ非同期クライアントと、コールバック内の endcall を表示します。

コールバック付きの非同期クライアントを表示します。endcall outside コールバックです。

コールバックを使用した非同期サーバー

コールバック付きの非同期サーバーを表示します。

チャネル スタックは、メッセージ受信時にクライアントを呼び出します。この処理のトレースは、ProcessRequest アクティビティ自体に出力されます。

非同期要求/エラー付き応答

エラー メッセージ エラーは、 endCall中に受信されます。 それ以外の場合、アクティビティと転送は前のシナリオと似ています。

エラーありまたはエラーなしの非同期 One-Way

応答またはエラーはクライアントに返されません。