ネット ピア TCP
このサンプルでは、ピア チャネルを使用してマルチパーティ通信を実現する、NetPeerTcpBinding バインディングを使用する方法を示します。このサンプルは、「入門サンプル」の変化形です。Windows Communication Foundation (WCF) の概要については、「入門サンプル」を参照してください。
このサンプルでは、アプリケーション インスタンスは、自己ホスト型コンソール アプリケーションです。
他のトランスポート バインディング サンプルとは異なり、このサンプルではマルチパーティ通信を表す目的でカスタム コントラクト インターフェイス (IBroadcast
) が使用されます。すべてのインスタンスでは、メッセージを受信して、同じコントラクトのプロキシを作成してメッセージをメッシュに送信するために、このコントラクトが実装されます。これは、メッシュへの二重チャネルを作成することで表されます。
メモ : |
---|
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。 |
このサンプルでバインディングの構成プロセスを理解するには、次のピア チャネルの概念を理解する必要があります。
ピア リゾルバは、メッシュ ID をメッシュ内のノードのエンドポイント アドレスに解決します。
メッシュは、メッシュ ID によって識別されるピア ノードの名前付きコレクションです。
ピア ノードは、メッシュに参加するアプリケーションのインスタンスです。
メッシュ ID は、メッシュ内のエンドポイント アドレスのホスト部分を識別します。こうしたアドレスの例としては、"net.p2p://chatMesh/servicemodelsamples/chat" や "net.p2p://broadcastMesh/servicemodelsamples/announcements" などがあります。chatMesh と broadcastMesh はメッシュ ID です。
メッシュに参加するすべてのクライアントでは、同じメッシュ ID を使用しますが、異なるパスとサービスを使用できる場合もあります。特定のエンドポイント アドレス宛のメッセージは、そのアドレスを使用するすべてのピア チャネルに配信されます。
(ピア チャネルを開いた結果として) 開いているピア ノードは、ピア リゾルバを使用してメッシュ ID を解決し、接続先となる他のいくつかのピア ノードのアドレスを取得します。これにより、相互接続されたノードによるメッシュが作成され、メッセージがメッシュ内で伝達されるようになります。
バインディングは、送信側と受信側の構成ファイルに指定されます。バインディングの種類は、エンドポイント要素の binding 属性で指定します。次のサンプル構成を参照してください。
<client>
<endpoint name="BroadcastEndpoint"
address=
"net.p2p://broadcastMesh/servicemodelsamples/announcements"
binding="netPeerTcpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.IBroadcast">
</endpoint>
</client>
既定の動作で NetPeerTcpBinding バインディングを使用する場合、パスワード ベースのセキュリティが有効です。バインディング要素には、ポート、リッスンする IP アドレス、リゾルバの種類、最大メッセージ サイズ、最大バッファ プール サイズ、リーダー クォータ、ピア ノード認証モード、メッセージ認証、およびタイムアウト (閉じる、開く、送信、受信) の属性が用意されています。
メモ : |
---|
このサンプルでは既定のピア リゾルバ (PNRP) を使用します。これは Windows Server 2003 では利用できないので、このサンプルを Windows Server 2003 で実行する場合は、カスタム ピア リゾルバを使用する必要があります。カスタム ピア リゾルバを使用するサンプルについては、「ピア チャネル チャット」を参照してください。コードは次のようになります。 |
<netPeerTcpBinding>
<binding configurationName="Binding1">
<resolver mode="Custom">
<customResolver type=
"MyAppNameSpace.MyCustomPeerResolver, myApp"/>
</resolver>
</binding>
</netPeerTcpBinding>
MyCustomPeerResolver
が含まれるファイルは、送信側と受信側でコンパイルする必要があります。サンプルをプラットフォームが異なる複数のコンピュータで実行する場合は、各コンピュータで同じリゾルバを使用する必要があります。
受信側と送信側での実装では、受信側または送信側のインスタンスに関連付けられたピア ノードを取得する方法と、そのピア ノードのオンライン イベントとオフライン イベントでの登録方法も示されます。ピア ノードがメッシュ内の少なくとも 1 つのピア ノードに接続されると、オンライン イベントが発生します。ピア ノードがメッシュ内のすべてのピア ノードとの接続を失うと、オフライン イベントが発生します。
現時点では、ピア チャネルはService Model Metadata Utility Tool (Svcutil.exe) と統合されていません。このため、型指定されたチャネルを送信側用に生成するために Svcutil.exe を使用することはできません。
送信側を実行すると、メッセージを送信する準備ができたことを示すメッセージが表示されます。Enter キーを押して、サンプル チャット メッセージを送信します。このメッセージは、現在実行されているすべての受信側クライアントのコンソール ウィンドウに表示されます。クライアントを終了するには、クライアント (送信側または受信側) のコンソール ウィンドウで再度 Enter キーを押します。
トレースまたはメッセージ ログを有効にすると、送信側や受信側のアクティビティをより詳細に監視できます。次の手順では、トレースやメッセージ ログを有効にする方法について説明します。
メモ : |
---|
このサンプルでは現在、インフラストラクチャでスローされる可能性のあるすべての例外が扱われているわけではないことに注意してください。これらのサンプルを商用環境または本運用環境で使用する場合は、適切な例外処理に関するベスト プラクティスに従うようにしてください。 |
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一コンピュータ構成でサンプルを実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。
Windows XP SP2 で PNRP をインストールするには (1 回限りのセットアップ):
[コントロール パネル] で [プログラムの追加と削除] をダブルクリックします。
[プログラムの追加と削除] ダイアログ ボックスで [Windows コンポーネントの追加と削除] をクリックします。
[Windows コンポーネント ウィザード] で、[ネットワーク サービス] チェック ボックスをオンにし、[詳細] をクリックします。
[ピア ツー ピア] チェック ボックスをオンにして、[OK] をクリックします。
[Windows コンポーネント ウィザード] で [次へ] をクリックします。
インストールが完了したら、[完了] をクリックします。
コマンド シェル プロンプトで、コマンド net start pnrpsvc を実行して PNRP サービスを起動します。
このサンプルでは、手順 3. でクライアントとサービスに言及されている場合、それらの手順は送信側と受信側に適用されます。
受信側 (複数可) と送信側を起動します。インスタンスが接続されたら、送信元アプリケーションのコンソールで Enter キーを押して、サンプルのメッセージを受信側に送信します。送信側から送信されたチャット メッセージは、すべての受信側で受信されます。
Copyright © 2007 by Microsoft Corporation.All rights reserved.