IISでWCFサービスをホストします。クライアントは次回作成します。クライアントは構成ファイルを使用する(クライアント編) - プログラマーな日々で作成したものを流用します。
手順
- SVCファイルを作成する
- Web.configを作成する
- 仮想ディレクトリを作成し、上記を格納する
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でホストしているので、別のサービスを起動してはいけない。