「ServiceStack/はじめに/最初のWebサービスを作ってみる」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「== ステップ1: プロジェクトを作る == ServiceStackはいくつかの方法でホストすることができる。 * コンソールアプリケーシ...」)
 
 
(3人の利用者による、間の4版が非表示)
42行目: 42行目:
  
 
== ステップ3: Webサービスを作ってみる ==
 
== ステップ3: Webサービスを作ってみる ==
 +
もし「Global.asax.cs」ファイルが無ければ手動で追加する。Xamarin Studioの新しいファイルダイアログでは「ASP.NET Web Forms」の「コードビハインド付きGlobal.asax」である。
 +
 +
まず、ServiceStackのサービスは3つの要素から構成されるという基本を覚えよう。
 +
* リクエストDTO
 +
* サービス実装
 +
* レスポンスDTO
 +
 +
これはServiceStackの根底にある[[ドメイン駆動設計]](通称[[DDD]])という[[哲学]]である。
 +
 +
=== 1: Webサービスを定義する(いわゆるリクエストDTO) ===
 +
<source lang="csharp">
 +
using ServiceStack.ServiceHost;
 +
[Route("/hello")]
 +
[Route("/hello/{Name}")]
 +
public class Hello
 +
{
 +
    public string Name { get; set; }
 +
}
 +
</source>
 +
 +
=== 2: Webサービスの戻り値を定義する(いわゆるレスポンスDTO) ===
 +
<source lang="csharp">
 +
public class HelloResponse
 +
{
 +
    public string Result { get; set; }
 +
}
 +
</source>
 +
 +
=== 3: Webサービスを実装する ===
 +
<source lang="csharp">
 +
using ServiceStack.ServiceInterface;
 +
public class HelloService : Service
 +
{
 +
    public object Any(Hello request)
 +
    {
 +
        return new HelloResponse { Result = "Hello, " + request.Name };
 +
    }
 +
}
 +
</source>
  
 
== ステップ4: Webサービスを登録してみる ==
 
== ステップ4: Webサービスを登録してみる ==
 +
最後にWebサービスを初期化し登録する。
 +
Global.asax.csファイルを以下のように編集する。
 +
 +
<source lang="csharp">
 +
using System;
 +
using System.Collections;
 +
using System.ComponentModel;
 +
using System.Web;
 +
using System.Web.SessionState;
 +
 +
using ServiceStack;
 +
 +
public class Global : System.Web.HttpApplication
 +
{
 +
    public class HelloAppHost : ServiceStack.AppHostBase
 +
    {
 +
        //Tell Service Stack the name of your application and where to find your web services
 +
        public HelloAppHost() : base("Hello Web Services", typeof(HelloService).Assembly) { }
 +
 +
        public override void Configure(Funq.Container container)
 +
        {
 +
            //register any dependencies your services use, e.g:
 +
            //container.Register<ICacheClient>(new MemoryCacheClient());
 +
        }
 +
    }
 +
 +
    protected void Application_Start(Object sender, EventArgs e)
 +
    {
 +
        new HelloAppHost().Init();
 +
    }
 +
}
 +
</source>
 +
 +
これで完成である。ServiceStackに関するすべての構成はAppHostで行われる。いわゆるアプリケーションのエントリポイントのようなものである。
  
 
== 動かしてみる ==
 
== 動かしてみる ==
51行目: 124行目:
 
== 外部リンク ==
 
== 外部リンク ==
 
* https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice
 
* https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice
 +
 +
== 参考文献 ==
 +
{{reflist}}
  
 
{{stub}}
 
{{stub}}

2015年10月19日 (月) 17:20時点における最新版

ステップ1: プロジェクトを作る[編集 | ソースを編集]

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

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


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

ステップ2: ServiceStackをインストールする[編集 | ソースを編集]

プロジェクトがServiceStackを使えるようにするには大きく2種類の方法がある。

NuGetを利用する[編集 | ソースを編集]

PM> Install-Package ServiceStack

これ一行でServiceStack関連のNuGetパッケージがどっさり再帰的にプロジェクトに追加され、Web.configなどある程度は自動設定される。なお、ServiceStackのNuGetパッケージは機能ごとに個別に提供されているので、本格的にServiceStackを使う際には必要なパッケージのみを入れるようにするとよい。

なお、MonoDevelopXamarin StudioでもNuGet Addin for MonoDevelop and Xamarin Studioを用いることこの方法で簡単に環境構築することができる。

手動で頑張る[編集 | ソースを編集]

最新のソースコードダウンロードして自分でビルドし、できあがったアセンブリプロジェクトに追加する。

アセンブリを追加したら、次にWeb.configファイルを編集してServiceStackを登録する。ServiceStackを使ったWebアプリがWebサーバーのルートパスに配置されるのであれば以下のような感じである。

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

<!-- Required for IIS 7.0 (and above?) -->
<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <handlers>
    <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
  </handlers>
</system.webServer>

他のWebフレームワーク(ASP.NET MVCを含む)と競合を避けつつカスタムパスにServiceStackアプリをホストする場合は以下を参照するとよい。 https://github.com/ServiceStack/ServiceStack/wiki/Run-servicestack-side-by-side-with-another-web-framework

ステップ3: Webサービスを作ってみる[編集 | ソースを編集]

もし「Global.asax.cs」ファイルが無ければ手動で追加する。Xamarin Studioの新しいファイルダイアログでは「ASP.NET Web Forms」の「コードビハインド付きGlobal.asax」である。

まず、ServiceStackのサービスは3つの要素から構成されるという基本を覚えよう。

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

これはServiceStackの根底にあるドメイン駆動設計(通称DDD)という哲学である。

1: Webサービスを定義する(いわゆるリクエストDTO)[編集 | ソースを編集]

using ServiceStack.ServiceHost;
[Route("/hello")]
[Route("/hello/{Name}")]
public class Hello
{
    public string Name { get; set; }
}

2: Webサービスの戻り値を定義する(いわゆるレスポンスDTO)[編集 | ソースを編集]

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

3: Webサービスを実装する[編集 | ソースを編集]

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

ステップ4: Webサービスを登録してみる[編集 | ソースを編集]

最後にWebサービスを初期化し登録する。 Global.asax.csファイルを以下のように編集する。

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

using ServiceStack;

public class Global : System.Web.HttpApplication
{
    public class HelloAppHost : ServiceStack.AppHostBase
    {
        //Tell Service Stack the name of your application and where to find your web services
        public HelloAppHost() : base("Hello Web Services", typeof(HelloService).Assembly) { }

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

これで完成である。ServiceStackに関するすべての構成はAppHostで行われる。いわゆるアプリケーションのエントリポイントのようなものである。

動かしてみる[編集 | ソースを編集]

トラブルシューティング[編集 | ソースを編集]

外部リンク[編集 | ソースを編集]

参考文献[編集 | ソースを編集]