當 asp.net 首次在 2002 年發布時,時代有所不同。 那時,internet 仍處於起步階段,大約有 5.69 億使用者,每個使用者平均每天訪問 internet 的時間為 46 分鐘,大約有 3 百萬個**。 僅僅在 10 年之後,相同的測量指標揭示,大約有 22.7 億個 internet 使用者,每個使用者平均每天訪問 internet 的時間為 4 小時,大約有 5.55 億個**。伴隨著網路應用程式開發的不斷演進,asp.net也伴隨著產生了新的技術,比如asp.net mvc和asp.net web api。網路應用程式開發的下乙個方向是進入雲計算, katana工程則為asp.net提供了基礎的模組,使網路應用程式變得更靈活、更輕量級、更容易移植以及擁有更好的效能 - 也就是說,katana工程能夠優化你的asp.net程式。
基於 owin 的應用程式中的每個元件都向伺服器提**用程式委託。 然後,這些元件鏈結成乙個管道,基於 owin 的伺服器將會向該管道推送請求。 為了更有效地使用資源,管道中的所有元件都應該是非同步的,這體現在返回 task 物件的應用程式委託中。隨著版本3的發布,kanata目前已經完整地支援了.net 4.5中新加入的非同步程式設計模型。儘管asp.net從十年前就已經開始支援非同步程式設計模型,但.net 2.0中引入的iasyncresult模型使用起來非常繁瑣,大多數開發者甚至都不知道它的存在。node.js趁虛而入,它將自己稱為高階非同步web開發平台,而微軟則希望通過在.net 4.5中引入的async/await模型重新奪回這一稱號。
包括應用程式狀態、請求狀態和伺服器狀態等在內的所有狀態都儲存在應用程式委託上指定的 idictionary物件中。 這種資料結構稱為環境字典,隨著請求通過管道時會從乙個元件傳遞到另乙個元件。 雖然任何鍵/值資料都可以插入到環境字典中,但 owin 規範為某些 http 核心元素定義了鍵.
http 請求的必需環境字典鍵
鍵名稱值說明
"owin.requestbody"
乙個帶有請求正文(如果有)的流。如果沒有請求正文,stream.null 可以用作佔位符。
"owin.requestheaders"
請求標頭的 idictionary
"owin.requestmethod"
乙個包含請求的 http 請求方法的字串(例如 get 和 post)。
"owin.requestpath"
乙個包含請求路徑的字串。 此路徑必須是應用程式委託的「根」的相對路徑。
"owin.requestpathbase"
乙個字串,包含對應於應用程式委託的「根」的請求路徑部分。
"owin.requestprotocol"
乙個包含協議名稱和版本的字串(例如 http/1.0 或 http/1.1)。
"owin.requestquerystring"
乙個字串,包含 http 請求 uri 的查詢字串組成部分,不帶前導「?」(例如 foo=bar&baz=quux)。 該值可以是空字串。
"owin.requestscheme"
乙個字串,包含用於請求的 uri 方案(例如 http 或 https)。
定義一組基本的環境字典鍵/值對,使得許多不同的框架和元件作者可以在乙個 owin 管道中進行互操作,而不必強制實施對特定 .net 物件模型的協議,例如針對 asp.net mvc 中的 httpcontextbase 或 asp.net web api 中的 httprequestmessage/httpresponsemessage 的協議。
應用程式委託和環境字典這兩個元素構成了 owin 規範。 katana 專案是 microsoft 建立和推出的基於 owin 的元件和框架集合。
在新的功能特性方面,新版本主要關注於「企業級認證功能以及基於宣告的標識(claims-based identity)」。參與了katana 3專案的vittorio bertocci特別提到了以下三種協議:
vittorio還寫道:
這個版本的發布還解決了由於twitter和google api發生變動所引起的問題。如果你在應用中使用了google認證,並且打算公升級到katana版本3,請確保你已讀過這篇帖子!
基於TcpListener的web伺服器
上篇文章根據 asp.net 本質論 書上提供的例子,實現了乙個簡單的web伺服器,本篇文章將介紹另一種實現方式 基於tcplistener的web伺服器。命名空間system.net.sockets下的tcplistener類簡化了基於tcp協議的監聽程式。using system using s...
基於TcpListener的web伺服器
上篇文章根據 asp.net 本質論 書上提供的例子,實現了乙個簡單的web伺服器,本篇文章將介紹另一種實現方式 基於tcplistener的web伺服器。命名空間system.net.sockets下的tcplistener類簡化了基於tcp協議的監聽程式。using system using s...
基於epoll的web伺服器
我們在大量併發的時候epoll有高的效能,所以我們選擇用他去做乙個bs模型的web伺服器 web伺服器 網路上是epoll併發,在解析http命令是下面的思路 具體的主要看 的思路 去除前面的 int n1 0 char pname name if strlen pname 1 else 通過對字元...