通信方式の切り替え(クライアント側)
次に、クライアント側の実装を変更します。
今度は、サービス提供側の構成ファイル(app.config)をクライアント側のMicrosoft Service Configuration Editorで読み込んで情報を自動生成しましょう。[ツール]-[Microsoft Service Configuration Editor]を実行し、[File]-[Open]よりWCFSampleClientプロジェクトの「app.config」を開きます。
右画面の[Create a New Client]を実行して新しいクライアント定義を追加する"New Client Element Wizard"を開始します。
[Browse]ボタンよりサービス提供側の構成ファイル(WCFMemberServiceGUI\app.config)を指定して[Next >]をクリックします。
ドロップダウン一覧より使用するEndpointを指定します。ドロップダウンの幅が短くて分かりづらいですが、TCPのEndpointである[net.tcp://localhost:8081/MemberService]を選択して[Next >]をクリックします。
新たに作成したクライアント定義の名前を指定します。EndpointTcpを入力して[Next >]をクリックします。
これでクライアント定義の追加は完了です。[Finish]をクリックします。
「app.config」を開き、追加された内容を確認します。
<endpoint address="net.tcp://localhost:8081/MemberService" binding="netTcpBinding" bindingConfiguration="" contract="WCFMemberServiceLibrary.ISampleService" name="EndpointTcp"> </endpoint>
新しいEndpointが追加されています。
先ほどはメタデータからコントラクトの内容を取得しましたが、今回はサービスのコントラクト(WCFMemberServiceLibrary\SampleService.cs)をコピーし、プロジェクトに追加します。
最後に「Program.cs」を書き換えます。
//using WCFSampleClient.localhost; using WCFMemberServiceLibrary; using System.ServiceModel; ・・・中略・・・ static void Main(string[] args) { // ISampleService client = new SampleServiceClient(); ChannelFactory<ISampleService> fact = new ChannelFactory<ISampleService>("EndpointTcp"); ISampleService client = fact.CreateChannel(); ・・・中略(処理は共通)・・・ }
まず、WCFSampleClient.localhost名前空間のusingをコメントアウトし、コピーしてきたコントラクトのWCFMemberServiceLibrary名前空間と、System.ServiceModel名前空間をusingします。
続いてMain
メソッド内でSampleServiceClientを作成していた部分をコメントアウトし、ChannelFactory
クラスを使うように変更します。ChannelFactory
クラスのコンストラクタには先ほど定義したエンドポイント名"EndpointTcp"を指定します。次行のCreateChannel
メソッドでISampleServiceインターフェイスを取得することができます。
それ以降のメンバ追加・取得処理は変更ありません。ビルドして実行しましょう。先ほどと同じ結果が得られるはずです。
以上で通信方式の切り替えは完了です。実際のソースコードの変更は少なく、設定ファイルの付け替えだけでほとんどの処理が済んでいることに注目してください。