NServiceKit/はじめに/最初のWebサービスを作ってみる
ナビゲーションに移動
検索に移動
目次
ステップ1:プロジェクトを作る
NServiceKitはいくつかの方法でホストすることができる。
- コンソールアプリケーション
- Windowsサービス
- ASP.NETやASP.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 で実行してみるとSafariやChrome、Vivaldiなどのデフォルトブラウザが立ち上がると思われる。