NServiceKit/はじめに/最初のWebサービスを作ってみる

提供: MonoBook
ナビゲーションに移動 検索に移動

ステップ1:プロジェクトを作る

NServiceKitはいくつかの方法でホストすることができる。

  • コンソールアプリケーション
  • Windowsサービス
  • ASP.NETASP.NET MVCなどの一部として同化する

このチュートリアルでは「空のASP.NET(ASP.NET MVCじゃないよ)」上にNServiceKitを使ったWebサービスを作ってみる。

ステップ2:NServiceKitをインストールする

NuGetでNServiceKitの主要パッケージを一気にぶちこむ。

  • NServiceKit.Host.AspNet

2015年10月時点のNServiceKitパッケージは本家ServiceStackほど親切ではないのでweb.configは自分で用意する必要がある。

  <system.web>
    <httpHandlers>
    <add path="*" type="NServiceKit.WebHost.Endpoints.NServiceKitHttpHandlerFactory, NServiceKit" verb="*"/>
    </httpHandlers>
  </system.web>

ステップ3:NServiceKitの初期化コードを準備する

プロジェクトに「Global.asax.cs」ファイルが無ければ手動で追加する。Xamarin Studioの新しいファイルを追加するダイアログでは「ASP.NET Web Forms」の「コードビハインド付きGlobal.asax」がこれに該当する。

Global.asax.csファイル を追加したら以下のように編集する。 この例では指定したクラスと同一のアセンブリ内にあるサービス(NServiceKit.ServiceInterface.Serviceクラスを継承したクラス)を登録している。

using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;

namespace WebApiServerV1
{
    public class Global : System.Web.HttpApplication
    {
        public class AppHost : NServiceKit.WebHost.Endpoints.AppHostBase
        {
            //NSerivceKitではAppHostBaseの引数に指定されたアセンブリの中にあるサービスが自動的に列挙される。
            public AppHost() : base("Hello Web Services", typeof(AppHost).Assembly) { }

            public override void Configure(Funq.Container container)
            {
                //register any dependencies your services use, e.g:
                //container.Register<ICacheClient>(new MemoryCacheClient());
            }
        }

        protected virtual void Application_Start (Object sender, EventArgs e)
        {
            var app = new AppHost();
            app.Init();
        }
    }
}

ステップ4:サービスを作ってみる

NServiceKitのサービスはドメイン駆動設計(通称DDD)という哲学に従い以下の3つの要素から構成される。

  • リクエストDTO
  • レスポンスDTO
  • サービス実装

リクエストDTO

サービスの引数に相当する。Route属性で呼び出し用のURLがどうなるかもここで決まる。

using ServiceStack.ServiceHost;

namespace WebApiServerV1
{
    [Route("/hello")]
    [Route("/hello/{Name}")]
    public class Hello
    {
        public string Name { get; set; }
    }
}

レスポンスDTO

サービスの戻り値に相当する。

using ServiceStack.ServiceHost;

namespace WebApiServerV1
{
    public class HelloResponse
    {
        public string Result { get; set; }
    }
}

サービス実装

サービスの本体を実装する。GetだのPostだのを実装する。なんでも受け付ける場合はAnyとなる。

using ServiceStack.ServiceInterface;

namespace WebApiServerV1
{
    public class HelloService : Service
    {
        public object Any(Hello request)
        {
            return new HelloResponse { Result = "Hello, " + request.Name };
        }
    }
}

動かしてみる

Xamarin Studio で実行してみるとSafariChromeVivaldiなどのデフォルトブラウザが立ち上がると思われる。

関連項目

参考文献