ピア チャネル カスタム ピア リゾルバ
カスタム ピア リゾルバのサンプルでは、ピア チャネル アプリケーションで使用できるカスタム リゾルバを実装する方法を示します。
このサンプルは、「自己ホスト」のサンプルに基づいています。さらに、Windows Communication Foundation (WCF) の概要については、「入門サンプル」も参照してください。
メモ : |
---|
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。 |
重要な概念 :
ピア チャネルとは、WCF のマルチパーティ対応ピアツーピア (P2P) 通信技術です。これにより、安全で、拡張可能な、信頼できるメッセージ機能が実現されます。ピア チャネルのメリットを活用するマルチパーティ アプリケーションの一般的な例は、チャットなどの共同作業アプリケーションです。チャットでは、ユーザーのグループがサーバーを必要としないピアツーピア方式で互いに会話します。ピア チャネルを使用することで、P2P コラボレーション、コンテンツ配布、負荷分散、および分散処理を軸とする顧客シナリオや企業シナリオが実現されます。
ピア チャネルでは、次の新しい概念が導入されています。
メッシュは、互いに通信可能で、一意のメッシュ ID により識別されるピア ノードの名前付きコレクション (相関グラフ) です。
メモ : メッシュ内のアクティブ ノードは、メッシュ名を公開して、他のノードが検索できるようにします。メッシュには次の特徴があります。まず、メンバシップの変更に対応します。次に、ノードが常にメッシュに参加したりメッシュから離脱したりする環境で接続を回復する機能があります。さらに、トラフィック パターンに基づいて接続が動的に最適化されます。
「ピア ノード」とは、メッシュ内のエンドポイントのことです。アプリケーションは、複数のピア ノードを使用して、異なるメッシュに参加できます。
ピア チャネルは、netPeerTcpBinding バインディング、または PeerTransportBindingElement を使用するカスタム バインディングを使用して構築されるチャネルです。
ピア リゾルバは、メッシュ ID をメッシュ内のノードのエンドポイント アドレスに解決します。開いているピア ノードは、ピア リゾルバを使用してメッシュ ID を解決して、メッシュ内の他のピア ノードのアドレス リストを取得します。これにより、相互接続されたノードによるメッシュが作成され、メッセージがメッシュ内で伝達されるようになります。
サンプルでは、カスタム ピア リゾルバ Web サービスを作成して実行可能ファイル内から自己ホストする方法を示します。クライアントはスタンドアロン アプリケーションではなく、カスタム ピア リゾルバを使用する他のピア チャネル アプリケーションでコンパイルされます。ピア チャネル アプリケーションでクライアント側のカスタム ピア リゾルバを使用する方法については、「ピア チャネル チャット」サンプルを参照してください。
カスタム ピア リゾルバ サービスは、メッシュ ID とエンドポイント アドレスをディクショナリにキャッシュし、クライアントからの登録要求および登録解除要求に応答して解決するシングルトン サービスです。
メッシュ ID は一意である必要があります。複数のアプリケーションで同じリゾルバを使用する場合、競合を避けるために異なるメッシュ ID を選択する必要があります。
このサンプルでは、静的な main 関数を実装し、指定された CustomPeerResolverService 型の ServiceHost を作成します。ホストはベース アドレスをサービス ホストに提供する必要もあります。サービス ホストは、構成ファイル (App.config) のアプリケーション設定で構成されます。
<appSettings>
<!-- use appSetting to configure base address provided by host -->
<add key="baseAddress"
value=" net.tcp://localhost/servicemodelsamples/peerResolverService" />
</appSettings>
このサービスは、RegisterMeshId、UnregisterMeshId、および ResolveMeshId 操作を公開するコントラクトを実装します。クライアントは指定された操作を同期要求し、サービスは結果と共に応答します。
サービスは、そのサービスとの通信に使用する単一エンドポイントを公開します。エンドポイントは構成ファイル (App.config) で定義します。バインディングは、TCP 通信を行う標準の NetTcpBinding を使用して構成されます。
<services>
<service
service="Microsoft.ServiceModel.Samples. CustomPeerResolverService">
<!-- use base address provided by the host -->
<endpoint address=""
binding=" netTcpBinding "
contract="Microsoft.ServiceModel.Samples. ICustomPeerResolver" />
</service>
</services>
上記の構成では、サービスと同じコンピュータ上にあるクライアントは、net.tcp://localhost/servicemodelsamples/peerResolverservice でサービスにアクセスできます。リモート コンピュータ上のクライアントがサービスにアクセスするには、localhost の代わりに修飾ドメイン名を指定する必要があります。
このサンプルを実行すると、操作の登録メッセージと登録解除メッセージがサービス コンソール ウィンドウに表示されます。同じメッシュ ID に複数の登録が行われた場合、最初の登録と最後の登録解除理由のメッセージだけがコンソール ウィンドウに表示されます。コンソール ウィンドウで Enter キーを押すと、サービスがシャットダウンされます (このサービスを使用するピア チャネル アプリケーションのシャットダウン後)。
メモ : |
---|
このサンプルでは現在、インフラストラクチャでスローされる可能性のある例外がすべて扱われているわけではありません。これらのサンプルを商用環境または本運用環境で使用する場合は、適切な例外処理に関するベスト プラクティスに従うようにしてください。 |
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションの C# 版、C++ 版、または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。このサンプルをチャット アプリケーションのリゾルバとして使用している場合は、ピア チャネル チャット アプリケーションを起動する前にこのサービスを起動してください。
Copyright © 2007 by Microsoft Corporation.All rights reserved.