日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用

發(fā)布時間:2025/4/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

接上篇OWIN產(chǎn)生的背景以及簡單介紹,在了解了OWIN規(guī)范的來龍去脈后,接下來看一下Katana這個OWIN規(guī)范的實現(xiàn),并看看如何使用在我們的Web開發(fā)中。

閱讀目錄:

一. Katana項目的結(jié)構(gòu)和包含的內(nèi)容

???? 1.1 Host
???? 1.2 Server
???? 1.3 Middleware
???? 1.4 Application

二. Katana示例代碼Hello World

???? 2.1 使用IIS Host運行Hello World
   2.2 將Hello World遷移到在自定義Host

三. OWIN Startup配置類詳解

???? 3.1 怎么沒有OWIN規(guī)范中的IDictionary<string, object>和Func<IDictionary<string, object>, Task>?
???? 3.2 Host是如何鏈接到Startup類的?

一. Katana項目的結(jié)構(gòu)和包含的內(nèi)容

通過了解Katana項目結(jié)構(gòu),我們能夠更加深入的理解OWIN規(guī)范。下面這張圖就是Katana項目的主要架構(gòu)。

上圖中的各個部分解釋:

1.1 Host

宿主只是一個進程,是整個OWIN程序的載體。這個宿主可以是IIS, IIS Express, Console, Windows Service等。
Host的主要作用:
1. 管理底層進程
2. 當有請求過來的時候,選擇相應(yīng)的Server和構(gòu)建OWIN管道處理請求。

我們最熟悉的Host就是IIS/Asp.net.? 不過IIS既是Host, 也是Server. 在IIS中使用標準的HttpModule和HttpHandler類型來響應(yīng)請求。Katana通過在IIS上構(gòu)建一個類似適配器,使得OWIN管道能夠運行在IIS上。
我們還可以自己實現(xiàn)一個簡單的Host, 這個Host可以在Console中,也可以是一個Windows Service進程。同時Katana也已經(jīng)提供了一個可以直接運行Host——OwinHost.exe

1.2 Server

負責綁定到 TCP 端口,監(jiān)聽端口發(fā)送過來的請求,同時將請求的信息依照OWIN規(guī)范,包裝成字典格式,傳遞到下層的Middleware.
Katana項目包含了2個Server實現(xiàn):
Microsoft.Owin.Host.SystemWeb
這個是用來對應(yīng)IIS的,由于IIS既是Host,又是Server. 所以這個Server實現(xiàn)的作用是注冊ASP.NET HttpModule和HttpHandler阻斷原有的處理流程,轉(zhuǎn)而把請求發(fā)送到OWIN管道中處理。
Microsoft.AspNet.Host.SystemWeb依賴于Sysetm.Web, 和IIS耦合厲害,所以無法遷移到非IIS服務(wù)器

Microsoft.Owin.Host.HttpListener
使用HttpListener打開Socket端口,監(jiān)聽請求,然后將請求包裝發(fā)送到OWIN管道中處理。

1.3 Middleware:

這是為組成 OWIN 管道中的組件。 它可以是從簡單壓縮組件到 ASP.NET Web API 這樣的完整框架.
當從客戶端發(fā)送一個請求,這個請求就會傳到OWIN管道中處理。這個管道是在startup code中初始化的。組成管道的組件就是Middleware.
要遵循OWIN標準,Middleware應(yīng)該要實現(xiàn)

Func<IDictionary<string, object>, Task>

Katana提供了一個OwinMiddleware基類更加方便我們繼承來實現(xiàn)OWIN Middleware.

1.4 Application

這是您的程序代碼。 由于 Katana 并不取代 ASP.NET,而是一種編寫和托管組件的新方式,因此現(xiàn)有的 ASP.NET Web API 和 SignalR 應(yīng)用程序?qū)⒈3植蛔?#xff0c;因為這些框架可以參與 OWIN 管道。 事實上,對于這些類型的應(yīng)用程序,Katana 組件只需使用一個小的配置類即可見。
OWIN和Katana并不是一個全新的開發(fā)方式,并不取代 ASP.NET,是實現(xiàn)Host, Server和Applicantion之間解耦,是一種編寫和托管組件的新方式 。比如使用OWIN方式開發(fā)Web API, 我們?nèi)匀贿€是使用Asp.net Web API. 只是Web API變成了我們OWIN管道的一個組成部分了。正常開發(fā)中,我們感覺不到OWIN的存在,只是在startup代碼中,構(gòu)建我們的OWIN管道。通常,對于Web API和SignalR這種大型組件,我們都是注冊在OWIN管道的最后。但是像authentication , cache這樣的組件,我們通常會注冊到管道前部。

二. Katana示例代碼Hello World

下面的示例是在VS 2013中操作的。

2.1 使用IIS Host運行Hello World

使用IIS作為宿主,是我們常用的方式。通過在IIS上建立一個OWIN管道,運行我們的程序。
首先,在VS2013中,創(chuàng)建一個新的Asp.net程序。

在彈出框中,選擇Empty模板

從Nuget中添加支持包

下一步是添加OWIN的支持包。從Tools-> Library Package Manager-> Package Manager Console. 然后在命令窗口中,運行install-package Microsoft.Owin.Host.SystemWeb.
也可以直接在nuget包管理界面上添加

添加Startup啟動類
Startup類的作用是用來初始化OWIN管道,這里,我們添加和初始化OWIN管道中的Middleware.

在Startup1.Configuration方法中,添加如下代碼:

public void Configuration(IAppBuilder app) {// New code:app.Run(context =>{context.Response.ContentType = "text/plain";return context.Response.WriteAsync("Hello, world.");}); }

上面的代碼做的事情,就是把一個簡單的Middleware注冊到OWIN管道中。這個中間件完成的事情非常簡單: 當接受到請求的時候,輸出Hello World.
啟動程序運行,結(jié)果頁面如下:

2.2 將Hello World遷移到在自定義Host

從IIS Host遷移到自定義Host非常簡單。使用IIS Host, IIS同時充當了Host和Server的角色。在自定義Host中, 我們將用Console程序作為Host, 同時用HttpListener來作為Server,監(jiān)聽固定端口發(fā)送的Http請求.
首先創(chuàng)建一個簡單的Console應(yīng)用程序,用Nuget添加Microsoft.Owin.SelfHost

同樣添加上我們的Startup1.cs, 然后將我們的Console程序改造成Host宿主。

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();}} }

啟動程序,然后在瀏覽器中鍵入http://localhost:9000訪問.
可以看到,OWIN的應(yīng)用,耦合關(guān)聯(lián)非常少,非常容易地在不同的Host之間遷移。以后在有除IIS外更多優(yōu)秀的Host/Server涌現(xiàn)的時候,我們的選擇就會更多

三. OWIN Startup配置類詳解

上面我們分別用IIS和Console為宿主,運行了一個簡單的Hello World程序。雖然只是一個簡單的Hello World, 其實里面包含的內(nèi)容還是挺多的,下面就來一一介紹。

3.1 怎么沒有OWIN規(guī)范中的IDictionary<string, object>和Func<IDictionary<string, object>, Task>?

上篇文章中,講到OWIN規(guī)范的時候,提到過在OWIN管道中傳輸?shù)臄?shù)據(jù)形式是IDictionary<string, object>,但是在我們的代碼中,并沒有出現(xiàn).

原因是在微軟的OWIN實現(xiàn)中,將字典類型包裝到了IOwinContext接口類型中。其實可以通過屬性Environment可以訪問到該字典,同時還包裝常用的request, reponse屬性。這樣我們就無需直接和IDictionary<string, object>打交道, 在OWIN規(guī)范上,字典類型是個非常好的設(shè)計,簡單通用,但是在實際開發(fā)中,直接操作字典類型獲取object, 然后再轉(zhuǎn)換類型等畢竟不是一個直觀和方便的過程。

我們的Startup.cs代碼中,下面的context參數(shù)類型,其實就是IOwinContext.

app.Run(context =>
{
context.Response.ContentType = "text/plain";
return context.Response.WriteAsync("Hello, world.");
});

關(guān)于另外一個問題,Func<IDictionary<string, object>, Task>在哪里?我們來看看Run函數(shù)的定義就一目了然了:

public static void Run(this IAppBuilder app, Func<Microsoft.Owin.IOwinContext, System.Threading.Tasks.Task> handler);

Startup.cs中,主要完成的工作,就是使用IAppBuilder來注冊Middleware到OWIN管道中。我們用lambda表達式注冊的Hello World, 其實就是一個Middleware組件,只是這個Middleware組件太簡單了。

3.2 Host是如何鏈接到Startup類的?

無論你使用IIS, IIS Express還是OWIN Host, 微軟在這些Host上實現(xiàn)的Service都會依照特定的規(guī)則來尋找到Startup類,執(zhí)行Configuration方法,注冊Middleware.

默認名稱匹配
可以定義Startup.cs類,只要這個類的namespace和Assembly的名稱相同。那么,這個Startup.cs中的Configuration方法,就會在OWIN管道初始化的時候執(zhí)行。

使用OwinStartup Attribute
這就是我們例子中使用的方式,直接指定哪個具體類是Startup類。

在配置文件的appSetting 節(jié)點設(shè)置

<appSettings> <add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> </appSettings>

通過上面的講解,希望能幫助大家理解Katana在實際項目中的使用。
下一篇中,更加接近實戰(zhàn),一起看看我們編寫Middleware

轉(zhuǎn)載于:https://www.cnblogs.com/JustRun1983/p/3962010.html

總結(jié)

以上是生活随笔為你收集整理的下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。