前言
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 http://www.linuxdot.net/
二, 用 Katana 实现一个自服务的 OWIN 的 Hello Word
需要引用一下程序集 (可通过 Nuget 获取).
- ,Owin.dll
- ,Microsoft.Owin.dll
- ,Microsoft.Owin.Hosting.dll
- ,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 的跨平台商业应用必须从编码 --> 测试 --> 发布 --> 运维的生命周期内可控.
来源: http://www.bubuko.com/infodetail-3350572.html