いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

WCF入門-012 (基本的なサンプル, IISでWCFサービスをホスト(HTTP))


IIS上で、WCFサービスをホストするには最低限以下のものを用意します。

  • svcファイル
  • web.config


svcファイルは、サービスの定義が記述されているファイルです。
web.configは、そのまま構成ファイル。


svcファイルの先頭には、以下のようにしてサービスの定義を記述します。

<%@ServiceHost Language="C#" Debug="true" Service="WCFHttpHost.MyService"%>

コードビハインドファイルが存在する場合は以下のように設定します。

<%@ServiceHost Language="C#" Debug="true" Service="WCFHttpHost.MyService" CodeBehind="~/App_Code/MyService.cs" %>


svcファイルには、そのままインラインでコードを記述することもできます。
簡単にサービスのテストする場合はこのほうが楽ですが、実際ちゃんとしたサービスを
ホストする場合は、別にDLLかソースコードを作成していることがほとんどです。
ソースコードをそのまま配置する場合は、App_Codeディレクトリを作成してその下に置きます。
DLLを配置する場合は、binディレクトリを作成してその下に置きます。


web.configには、普通にサービスの設定を行います。
その際、注意点としてIIS上でホストされる場合ベースアドレスの指定は必要ありません。
IIS側にてベースアドレスが決まっていますので。それ以外は同じです。


以下、サンプルです。
今回は、インラインでソースコードを記述しています。
まずは、svcファイル.

<%@ServiceHost Language="C#" Debug="true" Service="WCFHttpHost.MyService"%>

using System;
using System.Collections.Generic;
using System.ServiceModel;

namespace WCFHttpHost
{
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        string GetMessage(string name);
    }
    
    public class MyService : IMyService
    {
        public string GetMessage(string name)
        {
            return string.Format("Hello. '{0}'", name);
        }
    }
}


次にweb.config.
ベースアドレスを設定していない点に注意。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <services>
            <service name="WCFHttpHost.MyService" 
                     behaviorConfiguration="MyServiceBehavior">
                <endpoint address="" 
                          binding="basicHttpBinding" 
                          contract="WCFHttpHost.IMyService" />
                <endpoint address="mex" 
                          binding="mexHttpBinding" 
                          contract="IMetadataExchange" />
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="MyServiceBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>


後は、IIS上にアップすると配置完了です。
コンパイルは自動的に行われます。


サンプルは以下の場所にアップしてあります。
https://sites.google.com/site/gsfzero1/Home/WCFSample-012.zip?attredirects=0&d=1


================================
過去の記事については、以下のページからご参照下さい。