ASP.NET开发规范:OWIN
今天投简历 准备面试了...
本节目录:
OWIN简介
OWIN(Open Web Interface For .Net)
OWIN是.Net开源社区借鉴Ruby而制定的.Net Web开发架构,有着非常简单的规范定义,目标是用于解耦Web Server和Web Application.
ASP.NET的局限性
ASP.NET核心是System.Web,而System.Web紧耦合IIS.IIS绑定在Windows OS上,所以ASP.NET 无法跨平台.
System.Web是.NET Framework重要组成,所以System.Web更新需要等待.NET的发布
OWIN规范
OWIN定义了4层:
2
Host:主要负责应用程序的配置和启动进程,包括初始化OWIN Pipeline、运行Server。
Server:绑定套接字并监听的HTTP请求然后将Request和Response的Body、Header封装成符合OWIN规范的字典并发送到OWIN Middleware Pipeline中
Middleware:称之为中间件、组件,位于Server与Application之间,用来处理发送到Pipeline中的请求
Application:这是具体的应用程序代码,只不过我们将他们注册到OWIN Pipeline中去处理HTTP 请求,成为OWIN管道的一部分
OWIN接口
Func<IDictionary<string, object>, Task>;
用于Server和Middleware的交互。他并不是严格意义上的接口,而是一个委托并且每个OWIN中间件组件必须提供。
其中参数类型为IDictionary<string,object>的变量为环境变量
Katana
微软引入并推广OWIN,,同时依照OWIN规范,实现了Katana。
Host
宿主只是一个进程,是整个OWIN程序的载体。这个宿主可以是IIS, IIS Express, Console, Windows Service等。
Katana为我们提供了3中选择:
IIS / ASP.NET :使用IIS是最简单和向后兼容方式,在这种场景中OWIN Pipeline通过标准的HttpModule和HttpHandler启动。使用此Host你必须使用System.Web作为OWIN Server
Self-Host :如果你想要使用其他Server来替换掉System.Web,并且可以有更多的控制权,可以选择创建一个自定义宿主,如使用Windows Service、控制台应用程序、Winform来承载Server
OwinHost :也可以使用Katana提供的OwinHost.exe:他是一个命令行应用程序,运行在项目的根部,启动HttpListener Server并找到基于约束的Startup启动项
Server
负责绑定到 TCP 端口,监听端口发送过来的请求,同时将请求的信息依照OWIN规范,包装成字典格式,传递到下层的Middleware
Katana对OWIN Server的实现分为如下几类:
System.Web:当使用IIS作为Host时,System.Web把自己注册为HttpModule和HttpHandler并且处理发送给IIS的请求(Microsoft.Owin.Host.SystemWeb)
HttpListener:这是OwinHost.exe和自定义Host默认的Server。(Microsoft.Owin.Host.HttpListener)
WebListener:这是ASP.NET vNext默认的轻量级Server,他目前无法使用在Katana中
Middleware
这是为组成 OWIN 管道中的组件。
Middleware可以理解为提供Func<IDictionary<string, object>, Task>接口的组件。
Katana提供了一个OwinMiddleware基类更加方便我们继承来实现OWIN Middleware.
Application
具体的代码实现,比如ASP.NET Web API、SignalR具体代码的实现。
事实上,对于这些类型的应用程序,Katana 组件只需使用一个小的配置类即可见。
Hello World
IIS-Host
新建一个空的Web项目,Nuget引用Microsoft.Owin.Host.SystemWeb
创建Startup类
1 2 3 4 5 6 7 8 9 10 11
public class Startup { public void Configuration(IAppBuilder app) { app.Run(context => { context.Response.ContentType = "text/plain"; return context.Response.WriteAsync("Hello World!"); }); } }
访问项目地址::xx
Self-Host
新建控制台项目,Nuget引用Microsoft.Owin.SelfHost
Main方法
1 2 3 4
using (WebApp.Start<Startup>(":12345")) { Console.ReadLine(); }
创建Startup类
1 2 3 4 5 6 7 8 9 10 11 12 13
class Startup { public void Configuration(IAppBuilder app) { #if DEBUG //诊断 app.UseErrorPage(); #endif //欢迎页 //app.UseWelcomePage("http://www.mamicode.com/"); app.Run(x=>x.Response.WriteAsync("hello world")); } }
访问地址::12345
OWIN-Host
新建类库项目,Nuget引用OwinHost
创建Startup类(需要程序集Owin和Microsoft.Owin)
1 2 3 4 5 6 7 8 9 10 11
public class Startup { public void Configuration(IAppBuilder app) { app.Run(context => { context.Response.ContentType = "text/plain"; return context.Response.WriteAsync("Hello World!"); }); } }
OwinHost.exe
这里需要注意
Nuget下载完,OwinHost.exe会在package文件夹里
OwinHost.exe会加载./bin文件夹下的程序集作为server assembly
所以我们将这OwinHost.exe3个文件移动到
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/66545.html