一、OWIN初探


前言

     OWIN在.NET Web Servers與Web Application之間定義了一套標准接口,OWIN的目標是用於解耦Web Server和Web Application。基於此標准,鼓勵開發者開發簡單、靈活的模塊,從而推進.NET Web Development開源生態系統的發展。Open Web Server Interface for .NET的首字母縮寫即:OWIN

     更多關於OWIN的定義可訪問百度百科

一、OWIN

      目前微軟為OWIN提供了一套解決方案即ASP.NET - Katana 項目,Katana項目依賴於OWIN.dll的類庫,其中OWIN.dll類只有非常小的45k,以下為OWIN.dll的代碼:

using System;
using System.Collections.Generic;
namespace Owin
{
    public interface IAppBuilder
    {
        IDictionary<string, object> Properties
        {
            get;
        }
        IAppBuilder Use(object middleware, params object[] args);
        object Build(Type returnType);
        IAppBuilder New();
    }
}

     所以OWIN.dll只是定義了基礎的接口,如何實現還需要依賴其他解決方案才能實現一個簡單的Hello Word示例。所以OWIN是一套解耦Web Server和Web Application的標准,讓開發者能居於該標准實現更多的底層架構。

     國內的大牛也居於OWIN標准開發了一套OWIN的Web Server,TinyFox

二、用Katana實現一個自服務的OWIN的Hello Word

     需要引用一下程序集(可通過Nuget獲取)。

     1、Owin.dll

     2、Microsoft.Owin.dll

     3、Microsoft.Owin.Hosting.dll

     4、Microsoft.Owin.Host.HttpListener.dll

    創建一個控制台程序

    新建一個Startup.cs文件,代碼如下:

public class Startup
{
     public void Configuration(IAppBuilder app)
     {
         app.Run(HandleRequest);
     }

     static Task HandleRequest(IOwinContext context)
     {
         context.Response.ContentType = "text/plain";
         return context.Response.WriteAsync("Hello, world!");
     }
}

其中IAppBuilder接口定義於OWIN.dll,IOwinContext定義於Microsoft.Owin.dll.

     修改Program.cs文件,代碼如下:

static void Main(string[] args)
{
     var url = "http://localhost:8080/";
     var startOpts = new StartOptions(url);
     using (WebApp.Start<Startup>(startOpts))
     {
         Console.WriteLine("第一個Owin自服務" + url);
         Console.ReadLine();
     }
}

、意義

     owin編寫的自服務,可以運行於windows、Linux、FreeBSD。為C#的誇平台提供了可行的方案。在Windows上我們有強大的IIS,簡易的部署方式。但是將NET程序部署至Linux、FreeBSD總是存在不同的坑,在Linux上部署Web應用,國內大部分使用的是Jexus。

     個人認為OWIN最大的進步是將owin + Web API + docker打包將Linux的環境部署的“坑”進一步可控,每次更新將一個穩定的Docker程序發布即可。為NET的跨平台商業應用必須從編碼-->測試-->發布-->運維的生命周期內可控。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM