OWIN を少し理解できたので、ASP.NET Web API をマルチホストしてみました。コンソールアプリ、IIS の Webアプリ、Windows Azure の WebRole の3つでホスティングします。
ソリューション構成は、こんな感じです。
Web API のロジックをクラスライブラリにする
WebApiLibrary プロジェクトに NuGet パッケージをインストールします。
- Install-Package Microsoft.AspNet.WebApi.Owin
GETで"api/test"にリクエストすると、「Hello OWIN !」を返すシンプルな Web API です。
#TestController.cs public class TestController : ApiController { public string Get() { return "Hello OWIN !"; } }
#WebApiConfig.cs public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
コンソールアプリでホストする
ConsoleApplication プロジェクトに NuGet パッケージをインストールします。
- Install-Package Microsoft.AspNet.WebApi.Owin
- Install-Package Microsoft.Owin.Host.HttpListener
- Install-Package Microsoft.Owin.Hosting
OWIN パイプラインに Web API を追加します。
#Startup.cs [assembly: OwinStartup(typeof(ConsoleApplication.Startup))] namespace ConsoleApplication { public class Startup { public void Configuration(IAppBuilder app) { var config = new HttpConfiguration(); WebApiConfig.Register(config); app.UseWebApi(config); } } }
#Program.cs class Program { static void Main(string[] args) { using (WebApp.Start("http://localhost:8080/")) { Console.WriteLine("Press Enter to quit."); Console.ReadLine(); } } }
IIS の Webアプリでホストする
空のWebApplication プロジェクトに NuGet パッケージをインストールします。
- Install-Package Microsoft.AspNet.WebApi.Owin
- Install-package Microsoft.Owin.Host.SystemWeb
OWIN パイプラインに Web API を追加します。
#Startup.cs [assembly: OwinStartup(typeof(WebApplication.Startup))] namespace WebApplication { public class Startup { public void Configuration(IAppBuilder app) { var config = new HttpConfiguration(); WebApiConfig.Register(config); app.UseWebApi(config); } } }
Windows Azure の WebRole でホストする
上記の WebApplication と同じです。
実行結果
Google Chrome アプリの Postman で実行結果を確認してみます。
コンソールアプリ以外のURLでも、同じ結果が返されます。
まとめ
OWIN を利用することで、何でホストしても画一的な実装で書けるのは、大きなメリットです。サーバーとアプリを抽象化するだけでなく、ミドルウェアとして機能を追加できるところも面白いです。Web API 以外では、SignalR や Nancy のほかに、認証系のライブラリもありますし、第3のホストライブラリである Helios にも注目したいです。これからの One ASP.NET を語るうえで、OWIN は欠かせない技術であることは間違いなく、今後の進化に期待が高まります。