どういうこと?
WCFサービスライブラリのクライアントを作成します。コントラクト情報はVisual Studioの「サービス参照」を利用してWCFサービスから自動的に読み取ります。
どうすれば?
プロジェクトの作成
こちらで作成したソリューションに新しいプロジェクトを追加します。
WCFサービスライブラリの作成 - プログラマーな日々
今回はWCFサービスライブラリのプロジェクトテンプレートを使用して、WCFサービスを作成します。 ...
テンプレートは[Windows フォーム アプリケーション]を選択します。
参照の追加
作成したプロジェクトに「System.ServiceModel」への参照を追加します。
サービスの起動
前回作成したHost.exeを実行してサービスを起動します。
WCFサービスライブラリのホストを作成する - プログラマーな日々
前回(以下のエントリー)作成したWCFサービスライブラリの、ホストを今回は作成します。 ...
メタデータ公開の確認
- IEを起動し、"http://localhost:8000/WCFSampleService"と入力します。WCFサービスのメタデータが正しく公開されている場合、以下のようなテスト画面が表示されます。
- "http://localhost:8000/WCFSampleService?WSDL"を入力すると、以下のようにWCFサービスのWSDLの詳細が表示されます。
サービス参照の追加
- ソリューションエクスプローラーでプロジェクト「Client」を選択し、コンテキストメニューで「サービス参照の追加」をクリックします。すると以下のようなダイアログが表示されます。
- [アドレス]に"http://localhost:8000/WCFSampleService"を入力して、[移動]をクリックするとサービス情報が取得されるので、OKをクリックします。
- すると、WCFサービスのメタデータから取得したIService1のコントラクト情報と、IService1を利用できるクライアントのクラスが自動的に生成されます。
- app.configも自動的に作成されます。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="basicHttp" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:8000/WCFSampleService/HelloWCF" binding="basicHttpBinding" bindingConfiguration="basicHttp" contract="ServiceReference1.IService1" name="basicHttp" /> </client> </system.serviceModel> </configuration>
最後の[client]要素を見ると、WCFサービスのクライアントエンドポイントに必要な「アドレス」「バインディング」「コントラクト」の3要素が既にそろっていることがわかります。
- Host.exeを終了します。
ソースコードの作成
フォームにButtonを追加し、以下のコードを記述します。
using System; using System.Windows.Forms; using Client.ServiceReference1; namespace Client { public partial class Form1 : Form { public Form1() { InitializeComponent(); button1.Click += (s, e) => { Service1Client c = new Service1Client(); try { string outputMessage = c.GetMessage(".NET WCF"); MessageBox.Show(outputMessage); } catch (Exception ex) { MessageBox.Show("サービス呼び出し失敗:" + ex.Message); } c.Close(); }; } } }
マルチスタートアップの設定
以下のように設定します。
設定方法については、こちらを参照してください。
Visual Studioソリューションのマルチスタートアップが便利 - プログラマーな日々
Visual Studioでは、実行時に複数のプロジェクトを起動することができます。 ...