Owin介绍

什么是OWIN?

OWIN的英文全称是Open Web Interface for .NET。

如果仅从名称上解析,可以得出这样的信息:OWIN是针对.NET平台的开放Web接口。
那Web接口是谁和谁之间的接口呢?是Web应用程序与Web服务器之间的接口,OWIN就是.NET Web应用程序与Web服务器之间的接口。

为什么需要这样一个接口呢?因为.NET Web应用程序是运行于Web服务器之中的,.NET Web应用程序需要通过Web服务器接收用户的请求,并且通过Web服务器将响应内容发送用户。如果没有这样一个接口,.NET Web应用程序就要依赖于所运行的具体Web服务器,比如ASP.NET应用程序要依赖于IIS。有了这个接口,ASP.NET应用程序只需依赖这个抽象接口,不用关心所运行的Web服务器。

所以,OWIN的作用就是通过引入一组抽象接口,解耦了.NET Web应用程序与Web服务器,再次体现了接口的重要性。在软件开发中,每次解耦都是一次很大的进步。

【进一步的理解】

OWIN是对ASP.NET Runtime的抽象。
ASP.NET 5.0是OWIN的一种实现
通过下面几张图可以更直观地理解:


 
image.png
 
image.png
 
image.png
 
image.png

我对Owin理解

OWIN是一个规范和标准,旨在阐述web服务器和web应用应该如何去解耦,它使得原本不太可能迁移到其他环境的ASP.NET应用变得可能。

在OWIN之前,当我们在写ASP.NET应用的时候,我们的思想里是默认将我们的应用绑定到IIS上的,因为我们要依赖System.Web这个程序集。

System.Web这个程序集似乎在ASP的年代就存在着了,它包含的东西未必每个你都需要,但是每个默认每个请求都会使用这个资源,所以就可能造成一些浪费。

要明白的是OWIN本身是一个规范,它没有什么dll啊exe之类的,我理解它就是一份文档而已。

基于Owin的延伸

Katana源于微软,是微软为了实现OWIN的规范而作的产品,它就是实实在在的程序集了,我们可以使用它了。现在的Katanna实现了:

Web API
SignalR
目前ASP.NET MVC和Web Forms还是只能在System.Web中运行,不过长期来看,这部分很会被解耦,被分离出来。ASP.NET在IIS里的性能开销多半也是由于System.Web这个解不开根源,不过现在,我们有两个方式去搭建运行环境:

IIS
自宿主(Self-Host)
如果你想性能好点,你可以采取自宿主的方式;如果你想用到IIS那些为你做好的功能,那就用IIS吧。


链接:https://www.jianshu.com/p/7e518d30f57e

 

了解了一些基础理论,下面我们来实际开发。

 

OWIN Self-Host ASP.NET Web API 2

首先我们创建一个空的控制台项目:

 

然后通过Nuget来安装 Microsoft.AspNet.WebApi.OwinSelfHost

我们也可以打开NuGet控制台..输入命令:Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

 

然后我们再添加一个OWIN启动类名为Startup 如下:

 

 

 

Startup中编写代码如下: 

最后我们启动OWIN,在Program.cs 加入以下代码:

  1.  
    using Microsoft.Owin.Hosting;
  2.  
    using System;
  3.  
     
  4.  
    namespace OwinBlog
  5.  
    {
  6.  
    class Program
  7.  
    {
  8.  
    static void Main(string[] args)
  9.  
    {
  10.  
    string baseAddress = "http://localhost:9000/";
  11.  
    //string baseAddress = "http://+:9000/"; //绑定所有地址,外网可以用ip访问 需管理员权限
  12.  
    // 启动 OWIN host
  13.  
    WebApp.Start<Startup>(url: baseAddress);
  14.  
    Console.WriteLine("程序已启动,按任意键退出");
  15.  
    Console.ReadLine();
  16.  
    }
  17.  
    }
  18.  
    }

启动控制台程序,然后访问我们刚才设置的地址:

http://localhost:9000/api/blog

http://localhost:9000/api/blog/88

 

跨平台

 通过OWIN宿主ASP.NET WebAPI还可以完美的兼容Mono 3 及以上版本。

下面我们就来看看一下运行在linux下。首先大家要安装好 mono。

可以参考:http://www.cnblogs.com/linezero/p/4774850.html

测试系统版本:centos 6.4  mono 3.10.0

 

将OWIN 启动绑定改为绑定所有地址,然后编译。代码如下: 

  1. using Microsoft.Owin.Hosting;
  2.  
    using System;
  3.  
     
  4.  
    namespace OwinBlog
  5.  
    {
  6.  
    class Program
  7.  
    {
  8.  
    static void Main(string[] args)
  9.  
    {
  10.  
    string baseAddress = "http://+:9000/"; //绑定所有地址,外网可以用ip访问
  11.  
    // 启动 OWIN host
  12.  
    WebApp.Start<Startup>(url: baseAddress);
  13.  
    Console.WriteLine("程序已启动,按任意键退出");
  14.  
    Console.ReadLine();
  15.  
    }
  16.  
    }
  17.  
    }

 

将程序上传到linux 下,然后定位到程序目录,通过命令启动程序:mono OwinBlog.exe

程序已成功启动,下面我来访问看看:

 

 参考链接:

http://www.cnblogs.com/dudu/p/what-is-owin.html

http://www.cnblogs.com/shanyou/p/3650705.html

http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

posted @ 2022-07-05 13:56  net5x  阅读(112)  评论(0编辑  收藏  举报