次の方法で共有


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

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

同期要求/エラーなしの応答

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

顧客

サービス エンドポイントとの通信の確立

クライアントが構築され、開かれます。 これらの各手順について、アンビエント アクティビティ (A) は、それぞれ "クライアントの構築" (B) アクティビティと "Open Client" (C) アクティビティに転送されます。 転送されるアクティビティごとに、アンビエント アクティビティは、転送が戻るまで、つまり ServiceModel コードが実行されるまで中断されます。

サービス エンドポイントへの要求の作成

アンビエント アクティビティは"ProcessAction" (D) アクティビティに転送されます。 このアクティビティ内で要求メッセージが送信され、応答メッセージが受信されます。 コントロールがユーザー コードに戻ると、アクティビティは終了します。 これは同期要求であるため、アンビエント アクティビティは制御が戻るまで中断されます。

サービス エンドポイントとの通信を終了する

クライアントのクローズ アクティビティ (I) は、アンビエント アクティビティから作成されます。 これは新規およびオープンと同じです。

サーバー

サービス ホストの設定

ServiceHost の新しいオープン アクティビティ (N と O) は、アンビエント アクティビティ (M) から作成されます。

リスナー アクティビティ (P) は、リスナーごとに ServiceHost を開くと作成されます。 リスナー アクティビティは、データの受信と処理を待機します。

ネットワーク上のデータの受信

データがネットワークに到着すると、受信したデータを処理するための "ReceiveBytes" アクティビティがまだ存在しない場合 (Q) が作成されます。 このアクティビティは、接続またはキュー内の複数のメッセージに再利用できます。

ReceiveBytes アクティビティは、SOAP アクション メッセージを形成するのに十分なデータがある場合、ProcessMessage アクティビティ (R) を起動します。

アクティビティ R では、メッセージ ヘッダーが処理され、activityID ヘッダーが検証されます。 このヘッダーが存在する場合、アクティビティ ID は ProcessAction アクティビティに設定されます。それ以外の場合は、新しい ID が作成されます。

呼び出しが処理されると、ProcessAction アクティビティ (S) が作成され、転送されます。 このアクティビティは、ユーザー コード (T) の実行や、該当する場合の応答メッセージの送信など、受信メッセージに関連するすべての処理が完了すると終了します。

サービス ホストを閉じる

ServiceHost のクローズ アクティビティ (Z) は、アンビエント アクティビティから作成されます。

同期シナリオ (HTTP、TCP、または名前付きパイプ) を示す図。

<A: name>では、Aは前のテキストと表 3 のアクティビティを説明するショートカット 記号です。 Name は、アクティビティの短縮名です。

propagateActivity = true場合、クライアントとサービスの両方のプロセス アクションは同じアクティビティ ID を持ちます。

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

前のシナリオとの唯一の違いは、SOAP エラー メッセージが応答メッセージとして返される点です。 propagateActivity = true場合、要求メッセージのアクティビティ ID が SOAP エラー メッセージに追加されます。

エラーのない同期 One-Way

最初のシナリオとの唯一の違いは、サーバーにメッセージが返されないということです。 HTTP ベースのプロトコルの場合、状態 (有効またはエラー) は引き続きクライアントに返されます。 これは、HTTP が WCF プロトコル スタックの一部である要求/応答セマンティクスを持つ唯一のプロトコルであるためです。 TCP 処理は WCF から非表示になっているため、クライアントに受信確認は送信されません。

同期 One-Way とエラー

メッセージの処理中にエラーが発生した場合 (Q 以降)、通知はクライアントに返されません。 これは、"エラーのない同期 One-Way" シナリオと同じです。 エラー メッセージを受け取る場合は、One-Way シナリオを使用しないでください。

二連式

前のシナリオとの違いは、クライアントがサービスとして機能し、非同期シナリオと同様に ReceiveBytes アクティビティと ProcessMessage アクティビティが作成される点です。