miso_soup3 Blog

主に ASP.NET 関連について書いています。

OWIN を使ったセルフホストで ASP.NET Web API 2 をかんたん起動

追記

自分でコンソールアプリを作らなくても、NuGet から OwinHost をインスト すれば、プロジェクトフォルダ内に OwinHost.exe が追加されるので、それを使う方法もあります。Katana で Hello, world

===

Web API を利用したストアアプリを作成&デバッグしているときに、いちいち Visual Studio で ASP.NET Web API を起動するのが面倒だったので、セルフホストを使って exe で実行できるようにしました。

f:id:miso_soup3:20131017013423p:plain

トレース機能を有効にすると、Web API の呼び出しに合わせて内部の様子が確認できるので便利です。

セルフホスト自体は ASP.NET Web API 登場時からできましたが、ASP.NET Web API 2 が OWIN にフル対応したので、今はもう OWIN でホストすることで、セルフホストが可能になります。

ソリューション構成↓
f:id:miso_soup3:20131017015439p:plain

ASP.NET Web API 2 のプロジェクト「TaroWebApi」と、コンソールアプリケーションのプロジェクト「SelfHostConsole」の 2 つを用意しています。
以下、Visual Studio 2013 RC を使った手順を書いていきます。

参考サイト

(今回の OWIN を使ったセルフホストは、ASP.NET Web API のバージョン 1 では利用できません。バージョン 1 でセルフホストする場合は Self-Host a Web API (C#) を参照)

ASP.NET Web API 2 のプロジェクトを用意

既に作成してある場合は必要ないですが、ここでは簡単な Web API を用意するために一から作成します。

Visual Studio 2013 で、ファイル>新規作成>プロジェクト>ASP.NET Web アプリケーション を選択。
選択後は、シンプルな Web API プロジェクトを作成するために、下のように設定します。

f:id:miso_soup3:20131017020144p:plain

プロジェクト作成後、ApiController を用意します。
「Controllers」フォルダを右クリック>追加>スキャフォールディングビュー>読み取り/書き込みアクションがある Web API 2 コントローラ を選択します。

f:id:miso_soup3:20131017020709p:plain

コントローラー名は、「ValuesController」としました。

トレース機能の利用

NuGet より、トレース機能をインストールします。(パッケージ名:Microsoft.AspNet.WebApi.Tracing
パッケージマネージャーコンソールにて、以下のコマンドを打ちます。

Install-Package Microsoft.AspNet.WebApi.Tracing

インストール後、「App_Start」フォルダ内の WebApiConfig.cs にコードを追加します。

using System.Web.Http;

namespace TaroWebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            config.EnableSystemDiagnosticsTracing(); //←追加

            // Web API routes
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

コンソールアプリのプロジェクトを用意

ソリューションに、コンソールアプリのプロジェクトを追加します。
ソリューションエクスプローラで、ソリューションを右クリック>追加>新しいプロジェクト>コンソールアプリケーション を選択します。

プロジェクト作成後、先ほど作成した Web API プロジェクトの参照を追加します。(ValuesController.cs と WebApiConfig.cs を参照するためです)
コンソールアプリのプロジェクトの参照設定を右クリック>参照の追加 で、Web API プロジェクトを選択します。

f:id:miso_soup3:20131017022629p:plain

NuGet より、Microsoft.AspNet.WebApi.OwinSelfHost をインストールします。
パッケージマネージャーコンソールにて、以下のコマンドを打ちます。

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

※インストール先のプロジェクトは、コンソールアプリのプロジェクトにします。
(パッケージマネージャコンソールウィンドウの、「規定のプロジェクト」にコンソールアプリのプロジェクトが選択されていることを確認します。)

コンソールアプリのプロジェクトに、Startup.cs を新たに追加し、下の Configuration メソッドを追加します。

using Owin;
using System.Web.Http;

namespace SelfHostConsole
{
    public class Startup
    {
		public void Configuration(IAppBuilder appBuilder)
		{
			var config = new HttpConfiguration();
			TaroWebApi.WebApiConfig.Register(config);

			appBuilder.UseWebApi(config);
		}
    }
}

(ここの”TaroWebApi”というのは、Web API プロジェクトの名前空間になります。)

Program.cs の Main メソッドに下のようにコードを追加します。

using Microsoft.Owin.Hosting;
using System;

namespace SelfHostConsole
{
    class Program
    {
		static IDisposable _app;

        static void Main(string[] args)
        {
			string baseAddress = "http://localhost:9000/";

			_app = WebApp.Start<Startup>(url: baseAddress);

			Console.WriteLine("start:{0}", baseAddress);
			Console.ReadKey();
        }
    }
}

以上で、プロジェクトの準備は終わりです。
コンソールアプリを実行し、ブラウザ等で「http://localhost:9000/api/values」にアクセスすると、レスポンスが返ってきます。

後は、任意のタイミングで bin フォルダ内にある exe ファイルを実行し、Web API を呼び出すことができます。