Katana概述
OWIN
owin是web services和framework組件之間的抽象。抽象包括兩個核心要素:
environment dictionary 這個數據結構存儲處理HTTP請求必須的狀態和相關的服務器狀態。定義如下:
IDictionary<string, object>application delegate 服務于OWIN application中所有組件的主主要接口。定義下:
Func<IDictionary<string, object>, Task>;使用OWIN的例子
安裝Microsoft.Owin.Host.SystemWeb包(可以使基于OWIN的應用程序運行在IIS上)
public class Startup {public void Configuration(IAppBuilder app){app.Run(context =>{context.Response.ContentType = "text/plain";return context.Response.WriteAsync("Hello World!");});} }安裝OwinHost包(使用Katana的HttpListener-base server)
Katana的架構
Host
host負責:
- 管理底層的進程
- 構造OWIN pipline處理請求
目前Katana提供了3中host方式:
IIS/ASP.NET 使用HttpModule和HttpHandler的方式,OWIN piplines可以運行在IIS上。需要安裝Microsoft.AspNet.Host.SystemWebNuGet包。
namespace OWINTest{public class Startup1{public void Configuration(IAppBuilder app){// 有關如何配置應用程序的詳細信息,請訪問 http://go.microsoft.com/fwlink/?LinkID=316888app.Run(context =>{context.Response.ContentType = "text/plain";return context.Response.WriteAsync("Hello, world.");});} }}Custom Host 使用自定義進行進行托管applications
安裝Microsoft.Owin.SelfHost包,使用控制臺程序作為宿主,運行StartUp1
namespace Test{class Program{static void Main(string[] args){using (Microsoft.Owin.Hosting.WebApp.Start<Startup1>("http://localhost:9000")){Console.WriteLine("Press [enter] to quit...");Console.ReadLine();}}}}Server
server負責打開一個network socket,監聽request,通過開發者指定的OWIN pipline(pipline的確定是在application的StartUp類中)發送請求。Katana項目提供了兩種實現:
Microsoft.Owin.Host.SystemWeb:IIS和ASP.NET pipline合作作為host與server。Katana 注冊一個HttpModule和HttpHandler攔截請求,發送請求到指定的OWIN pipline
Microsoft.Owin.Host.HttpListener:使用.NET Framework的HttpListener類打開一個socket,發送請求到指定的OWIN pipline。當前OwinHost.ext和Katana self-host選擇它作為默認的server。
Middleware
server接收客戶端的請求,通過開發者在StartUp中指定的OWIN組件構成的pipline傳遞請求。這些pipline組件就是middleware
Applications
OWIN和Katana是一種解耦server和host的編程模型和框架的抽象。當構建一個Web Api應用時,開發者框架繼續使用ASP.NET Web API框架,而不用關心應用程序是否運行在使用Katana項目組件構成的OWIN pipline上。與OWIN相關的代碼盡在StartUp類中,在此開發者使用UseXX注冊一系列的組件,構成OWIN pipline,每個組件處理都進入的請求。這與現在System.Web中的HTTP modules具有相同的效果
轉載于:https://www.cnblogs.com/goodlucklzq/p/4498123.html
總結
- 上一篇: Android使用Volley框架显示“
- 下一篇: 《Docker》高级篇