前言

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

一、OWIN初探的更多相关文章

  1. OWIN初探(转)

    什么是 OWIN ? OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一 ...

  2. C# Owin初探 概念理解(一)

    本文是阅读网上大牛的文章总结而成. 目录 1.Owin定义 2.为什么要用Owin 3.作用 4.总结 1.Owin定义 Owin是Open Web Interface For .NET.也就是.Ne ...

  3. OWIN初探

    什么是 OWIN ? OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一 ...

  4. 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】

    因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...

  5. 动态WebApi

    动态WebApi实现了直接对Service的调用,其实没有跨过ApiController,只是我们自己创建出ApiController 实现主要分以下几步 一 对默认WebApi服务的替换 ApiGl ...

  6. 初探Asp.net5

    说到Asp.net 5,确实让我有种激动的心情,微软的全力大招在一波一波的发出,也在牵动着每一个程序员的心.作为你们中的一员,在每次看到微软的新技术时,都满怀一种激动的心情,也同时希望微软在开源和跨平 ...

  7. ASP.NET WebApi OWIN 实现 OAuth 2.0

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...

  8. ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus

    ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...

  9. 介绍一位OWin服务器新成员TinyFox

    TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇".TinyFox本身的功能是html服务器,所有的WEB应 ...

随机推荐

  1. 转载list

    Linux系统下安装rz/sz命令及使用说明 http://blog.csdn.net/kobejayandy/article/details/13291655

  2. 集群 & 负载均衡

    集群(Cluster) 指一组计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信,实现分布式计算.在客户端看来就像是只有一个服务器.集群可以利用多个计算机进行并行计算从而获得很高 ...

  3. git常见命令

    总结自己的Git常用命令 使用git也有一段时间了,把自己常用的命令用自己的描述记录起来,方便自己备忘也方便其他人参考. 目录: 最基本的命令: git clone 拷贝并跟踪远程的master分支. ...

  4. 如何解决Oracle RAC 安装集群软件或数据库时无法自动识别节点

    在节点一 grid用户下: $ORACLE_HOME=/u01/app/11.2.0/grid/ [grid@orarac1 /]$ cd /u01/app/11.2.0/grid/oui/bin [ ...

  5. 解决VS下“LC.exe已退出,代码为-1”问题

    今天使用VS2015开发一个Winform程序,手一抖拖错了一个第三方控件,然后将其去掉并删除相关的引用,结果导致了LC.exe错误:"Lc.exe已退出,代码为-1 ". 经过上 ...

  6. jQuery整体架构源码解析(转载)

    jQuery整体架构源码解析 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性, ...

  7. SparkConf加载与SparkContext创建(源码阅读一)

    即日起开始spark源码阅读之旅,这个过程是相当痛苦的,也许有大量的看不懂,但是每天一个方法,一点点看,相信总归会有极大地提高的.那么下面开始: 创建sparkConf对象,那么究竟它干了什么了类,从 ...

  8. mongodb高级查询

    前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客  MongoDB下载安装与简单增删改查 前奏:启 ...

  9. tornado 反向代理后 获取真实客户端IP

    首先,nginx必定会设置一个Header传送过来真实的IP nginx.conf server { proxy_set_header X-Real-IP $remote_addr; location ...

  10. 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)

    Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...