前言

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的跨平台商业应用必须从编码-->测试-->发布-->运维的生命周期内可控。

最新文章

  1. PHP设计模式(六)原型模式(Prototype For PHP)
  2. javascript之数组操作
  3. cocos2dx游戏开发——微信打飞机学习笔记(十一)——GameOverScene的搭建
  4. 怎么设置task的最大线程数
  5. 通过YAJL生成json语句
  6. oracle动态注冊參数local_listener
  7. auto_ptr and scoped_ptr
  8. Web前端开发的一点记录
  9. JavaScript特效制作经典精讲(案例入门详解、可直接粘贴拷贝运行、史上最牛案例)
  10. Oracle检查锁及其等待的行ROWID
  11. vue学习笔记(1)—— 组件化实现todoList
  12. windows下配置wampserver
  13. CentOS7+mysql5.6配置主从
  14. 当List&lt;String&gt; list =new ArrayList&lt;String&gt;(20); 他会扩容多少次
  15. POSIX信号量
  16. 括号生成(Java实现)
  17. paloalto防火墙接口使用方法及实例
  18. CentOS7配置网络
  19. SpringBoot的读取properties文件的方式
  20. [转]mysql delete 使用别名 语法

热门文章

  1. Kali2.0VMwareTools安装
  2. php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
  3. IntelliJ IDEA 的 20 个代码自动完成的特性
  4. Android studio 快捷键(Mac)
  5. C(C++)输入输出格式
  6. Google Dapper-大规模分布式系统的基础跟踪设施
  7. 转载:JAVA的静态变量、静态方法、静态类
  8. ubuntu下sublime中文无法输入的问题
  9. 第一章 数据库概述、MySQL的安装和配置
  10. http请求相关