MS_OWIN - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- 戻る(ASP.NET)
- OWIN
- ASP.NET Core
OWIN (Open Web Interface for .NET)
- .NET の Web サーバと Web アプリケーションを接続するためのインタフェース。
- 新しい HTTP Server のプログラミング抽象化レイヤーを定義する。
- OWIN 統合により、One ASP.NET の Pluggable を促進する。
- OWIN のリファレンス実装は「Katana プロジェクト」。
昨今、色々と技術的な変化が早いため、
OWIN が登場した。
-
OWIN の目標 & 達成したこと。
-
System.Web(≒ IIS)から脱却し、性能の向上を可能にした。 - .NET Framework のサイクルから外れた早いリリースを可能にした。
-
-
これらは、ASP.NET Coreに引き継がれ役立っている。
補足(なぜ
System.Webからの脱却が必要だったか):System.Webは
IISと密結合しており、次の問題を抱えていた。
問題 内容 ホストの固定 IIS 以外(自己ホスト、Linux)で動かせない 重い HttpContextを含む巨大なオブジェクト グラフが要求ごとに作られる更新できない System.Web.dllは .NET Framework の一部。単体でバージョンアップできないOWIN はこれを「辞書とデリゲートだけ」という
最小のインターフェイスに置き換えることで解いた。
この発想は Ruby の Rack、Python の WSGI と同じ系譜にある。
-
HttpContextから脱却し、環境を保持する environment dictionary。 - HTTP request and response を処理するのに必要なデータは保持される。
IDictionary<string, object>コンポーネントの間は下記の function signature で呼ばれる。
Func<IDictionary<string, object>, Task>補足(この 2 つが全て): OWIN の仕様は実質この 2 行に尽きる。
「リクエスト情報の入った辞書を受け取り、Taskを返す関数」を
数珠つなぎにするだけで、Web アプリケーションのパイプラインが構成される。
ASP.NET Coreのミドルウェア
(RequestDelegate = Func<HttpContext, Task>)は
型がHttpContextに変わっただけで、構造はそのままである。
以下の様な、OWIN ミドルウェアが存在する。
この「ミドルウェア」を自作すればパイプライン上で挙動をカスタマイズできる。
-
neue cc - OWINのパイプラインとMiddleware作成ガイド
http://neue.cc/2014/01/06_442.html -
neue cc - OWINの仕組みとOWIN上のフレームワーク(ミドルウェア)の作り方
http://neue.cc/2014/05/13_473.html -
ログイン処理を行うOWINミドルウェアの作成 - Qiita
http://qiita.com/ken200/items/fea146f0bad9d21fe302
シンプルに
「セルフホストや OWIN ミドルウェアを使用するために、
パイプラインを OWIN 化すること。」
と捉えると良い。
-
OWIN - Open Web Interface for .NET を使う — Kyrt Blog
http://kyrt.in/2013/12/17/owin_azure_cache_session_middleware.html
以下に「これからは ASP.NET 5。(死に切ってはいないけれど) OWIN is dead!!」とある。
- ASP.NET 5はどうしてOWIN上に乗らなかったのか - xin9le.net
http://blog.xin9le.net/entry/2015/01/18/161631
今では完全に OWIN と Katana Project は止まっているらしい。
(ASP.NET 5 は、現在はASP.NET Coreと名称が変更されている。)
OWIN と Katana の意味が長々明確ではありませんでしたが、
- Katana Project が止まって、
- Katana Project 所有の仕様である OWIN も止まった
ということだったようでしたが、その後、OWIN の仕様は、
ASP.NET 5、ASP.NET Coreと引き継がれて生きているようです。
- ASP.NET Coreは、OWIN をサポートしています。
-
ASP.NET Coreアプリケーションとミドルウェアは、
OWIN ベースのアプリケーション、サーバ、ミドルウェアと相互運用できます。
ただし、OWIN の上でASP.NET Coreが動くのではなくて、
ASP.NET Core自体が OWIN 互換レイヤーを実装することで
サポートしたようです。
補足(現在の結論): この整理はそのとおりで、その後さらに進んだ。
対象 現状 OWIN 仕様 / Katana 開発は完全に停止。新規に学ぶ必要はない Microsoft.Owin.*パッケージ.NET Framework 版 ASP.NET の既存資産としては現役 ASP.NET Core の OWIN 互換レイヤ UseOwin()として存在するが、使う場面はまず無い思想 ミドルウェア パイプラインとして ASP.NET Core に完全に継承された つまり「OWIN is dead」は製品としては正しく、思想としては誤りである。
現在 ASP.NET Coreで
app.Use(async (context, next) => { ... })と書くとき、
それは OWIN が提示したモデルそのものである。なお、実務上の注意として、
Microsoft.Owin.*は .NET Core 以降に移植されていない。
ASP.NET Identity の OWIN ミドルウェア
(UseCookieAuthentication等)に依存した既存アプリを移行する場合、
ASP.NET Coreの認証 API への書き直しが必要になる。
詳細はASP.NET Coreへの移行を参照。
-
Open Web Interface for .NET (OWIN)
https://learn.microsoft.com/aspnet/core/fundamentals/owin -
OWIN と Katana
https://learn.microsoft.com/aspnet/aspnet/overview/owin-and-katana/
Tags: 移行, .NET開発, OWIN