プログラマーな日々

プログラマーをやっています。好きなものは、C#, TaskChute Cloud, WorkFlowy, Backlog, AWSです。

IISでWCFサービスをホストする(サービス編)

IISでWCFサービスをホストします。クライアントは次回作成します。クライアントは構成ファイルを使用する(クライアント編) - プログラマーな日々で作成したものを流用します。

手順

  1. SVCファイルを作成する
  2. Web.configを作成する
  3. 仮想ディレクトリを作成し、上記を格納する

StockService.svc

SVCファイルに実装を含めています。
ServiceHostディレクティブがあること以外は以下のエントリーと同じソースコードですが、返却される金額は変えています。
構成ファイルを使用する(サービス編) - プログラマーな日々
前回(以下のエントリー)で作成したWCFサービスの設定を構成ファイルに外出しします。 ...

<% @ServiceHost Language=c# Service="HelloWorld.StockService" %>

using System;
using System.ServiceModel;
namespace HelloWorld {
    [ServiceContract]
    public interface IStockService {
        [OperationContract]
        double GetPrice(string ticker);
    }

    public class StockService : IStockService {
        public double GetPrice(string ticker) {
            return 91.23;
        }
    }
}

Web.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <services>
            <service
                name="HelloWorld.StockService"
                behaviorConfiguration="MexServiceTypeBehavior" > <!-- 12/10修正。タグをとじていなかった。-->
                <!-- エンドポイントが1つだけのときは、アドレスを空白にしてサービスアドレスと同じことを示す -->
                <endpoint
                    address=""
                    binding="basicHttpBinding"
                    contract="HelloWorld.IStockService" />
                <!-- MEX(MetaDataExchange)エンドポイントを明示的に有効にする -->
                <endpoint
                    address="mex"
                    binding="mexHttpBinding"
                    contract="IMetadataExchange" />
            </service>
        </services>

        <behaviors>
            <serviceBehaviors>
                <behavior name="MexServiceTypeBehavior">
                    <serviceMetadata httpGetEnabled="true"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

アプリ実行

※先にサービスを実行し、待機状態にしておきます。
サービスから値を取得できました。

12/10修正。IISでホストしているので、別のサービスを起動してはいけない。