差分

ナビゲーションに移動 検索に移動

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

3,978 バイト追加, 2015年10月19日 (月) 18:18
ページの作成:「 ==ステップ1:プロジェクトを作る== NServiceKitはいくつかの方法でホストすることができる。 * コンソールアプリケーション...」

==ステップ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は本家ServiceKitほど親切ではないのでweb.configは自分で用意する必要がある。
<source lang="xml">
<system.web>
<httpHandlers>
<add path="*" type="NServiceKit.WebHost.Endpoints.NServiceKitHttpHandlerFactory, NServiceKit" verb="*"/>
</httpHandlers>
</system.web>
</source>

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

Global.asax.csファイル
を追加したら以下のように編集する。
この例では指定したクラスと同一のアセンブリ内にあるサービス(NServiceKit.ServiceInterface.Serviceクラスを継承したクラス)を登録している。
<source lang="csharp">
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();
}
}
}
</source>

==ステップ4:サービスを作ってみる==
NServiceKitのサービスはドメイン駆動設計(通称DDD)という哲学に従い以下の3つの要素から構成される。
*リクエストDTO
*レスポンスDTO
*サービス実装

===リクエストDTO===
サービスの引数に相当する。Route属性で呼び出し用のURLがどうなるかもここで決まる。
<source lang="csharp">
using ServiceStack.ServiceHost;

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

===レスポンスDTO===
サービスの戻り値に相当する。
<source lang="csharp">
using ServiceStack.ServiceHost;

namespace WebApiServerV1
{
public class HelloResponse
{
public string Result { get; set; }
}
}
</source>

===サービス実装===
サービスの本体を実装する。GetだのPostだのを実装する。なんでも受け付ける場合はAnyとなる。
<source lang="csharp">
using ServiceStack.ServiceInterface;

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

==動かしてみる==
[[Xamarin Studio]] で実行してみると[[Safari]]が立ち上がると思われる。

==関連項目==
*[[NServiceKit]]

==参考文献==
{{reflist}}

{{stub}}
匿名利用者

案内メニュー