掲載するサンプルではnetTcpBindingを使用します。wsHttpBinding等でもReliable Sessionを使用することができます。
確認環境
- Windows Vista Enterprise(スタンドアロン,WCFサービス,クライアントともに同一マシン)
- 開発環境 Visual Studio 2008 Professional (英語版)
- .NET 3.5
1.ソリューションの作成
Visual Studioを起動して、空のソリューション作成します。名前はWCFSample013とします。WCFサンプル再作成(ブラッシュアップ) で作成した次のプロジェクトを今回作成したソリューションの直下にコピーします。ソリューションを右クリックして、既存のプロジェクトのとして追加します。
- WCFSample.ConsoleClient
- WCFSample.ProductService
- WCFSample.WPFHost
2.WCFホストの構成変更
netTcpBindingを使用するので、WPFHostプロジェクトのApp.config内の<system.serviceModel>タグ内を削除してからWCF Service Configuration Editorで編集します。
2.1 Bindingコンフィギュレーションの作成
左ペインのBindingsを右クリックして新しいバインディングコンフィギュレーション作成します。最初のダイアログでnetTcpBindingを選択して、ダイアログを閉じます。右ペインのNameをProductServiceNetTcpBindingConfig、ReliableSession PropertiesのEnabledをTrueに変更し、OrderedをTrue(デフォルト)であることを確認します。

Binding構成のTransferModeがBufferredである必要があります。
2.2 ServiceとEndpointの構成
左ペインのServicesを選択し、右側ペインのCreate a New ServiceをクリックしてWizardを起動し、次の設定を行います。
- Service typeにWCFSample.ProductService.ProductServiceを入力して[Next]をクリック
- ContractにWCFSample.ProductService.IProductServiceを入力して[Next]をクリック
- BindingConfigurationの選択ダイアログでExisting bindingラジオボタンをクリックし、コンボボックスからProductServiceNetTcpBindingConfigを選択して[Next]をクリック
- Addressにnet.tcp://localhost:8056/ProductServiceを入力して[Next]をクリック
- 次の確認画面が表示されるので、[Finish]をクリックして終了。

ウィザードの詳細な図つきの流れはWCFSample002:ServiceHostを使用したWCFサービスをホストするプログラムを作ってみる を参照。
左ペインのServices→[Endpoints]から作成されたEndpointを選択して、NameをProductServiceNetTcpEndpointに変更して上書き保存します(下図)。

以上でサービス側の変更完了です。
3.WCFクライアントの構成編集
3.1 構成の変更
WCFSample.ConsoleClientのApp.configの<system.serviceModel>タグ内ををいったん削除してからWCF Service Configuration Editorで編集します。左ペインのBindingsをクリックして右ペインのCreate Binding Configurationをクリックします。右側ペインのNameをProductServiceNetTcpBindingConfig,ReliableSessionをTrueに変更、OrderedがTrueであることを確認します。

左ペインのClient→Endpointsを右クリック→New Client Endpointをクリックします。右ペインのNameをProductServiceNetTcpEndpoint、BindingにnetTcpBindingを選択、Addressにnet.tcp://localhost:8056/ProductService、ContractにWCFSample.Client.Proxy.ProductServiceを入力します。BindingConfigurationにProductServiceNetTcpBindingConfigをセットします(下図)。

3.2 プログラムの変更
Program.cs内のMainメソッドでバインディングの名前を今回作成したをProductServiceNetTcpEndpointに変更します。
class Program { static void Main(string[] args) { System.Console.WriteLine("WCFサービスホストを起動したら、キーを入力して下さい。"); System.Console.Read(); // エンドポイントの名称を変更 ProductServiceClient proxy = new WCFSample.Client.Proxy.ProductServiceClient("ProductServiceNetTcpEndpoint"); int[] productIDs = proxy.GetProductIDs(); ... } }
クライアントの修正は以上です
4.動作確認
ソリューションのプロパティからMultiple Startup Projectとして、WCFSample.ConsoleClientとWCFSample.WPFHostを開始プロジェクトに設定してデバッグ実行します。FireWallの警告が表示された場合はアンブロックとして下さい。トレースのヘッダを確認するとMessageNumberというタグが追加され、メッセージにシーケンス番号が振られるようになります。トレースログを使うサンプルはこちら。
説明は以上です。誤り、問題などがありましたら、ご指摘ください。