Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

HostアプリなしでWCFサービスのサービス参照を取得する

前回のエントリーでgsf_zero1さんからコメントをもらいました。
WCFサービスライブラリのクライアントを作成する - プログラマーな日々

同じソリューション内にWCFサービスライブラリが存在している場合は、「サービス参照の追加」画面で「探索」ボタンをクリックしても追加できますよ。:)

Hostアプリを起動しなくて良いので結構便利です。

そこで今回はHostアプリを削除して試して見ます。

前回作成したソリューション


以下を削除します。
  1. Hostプロジェクト
  2. ClientプロジェクトのServiceReference1、app.config

Hostアプリなしで試してみる。

サービス参照の追加
  • ソリューションエクスプローラーでプロジェクト「Client」を選択し、コンテキストメニューで「サービス参照の追加」をクリックします。すると以下のようなダイアログが表示されます。

  • [アドレス]に"http://localhost:8000/WCFSampleService"を入力して、[移動]をクリックしてもWCFサービスが起動していないので、サービス情報は取得できません。

  • 今度は[探索]をクリックしてみます。サービス参照が見つかりました。


  • [OK]をクリックすると、WCFサービスライブラリのメタデータから取得したIService1のコントラクト情報と、IService1を利用できるクライアントのクラス、app.configが自動的に生成されます。


  • app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IService1" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" />
                    <security mode="Message">
                        <transport clientCredentialType="Windows" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                            algorithmSuite="Default" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:8000/WCFSampleService/Service1/"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
                contract="ServiceReference1.IService1" name="WSHttpBinding_IService1">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>
ソリューションをマルチスタートアップに設定する。

以下のように設定します。

設定方法については、こちらを参照してください。
Visual Studioソリューションのマルチスタートアップが便利 - プログラマーな日々
Visual Studioでは、実行時に複数のプロジェクトを起動することができます。 ...

F5キーを押す。

WCFテストクライアントとForm1が起動します。


Formのbutton1をクリックすると、WCFサービスのメソッドを呼び出したことを確認できます。