什么是 OWIN ?

  OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口, 其目的是为了实现服务器与应用之间的解耦, 鼓励为 .NET Web 应用开发简单模块。

  OWIN 是一个开源开放的标准, 有助于建设 .NET 开发的开源生态环境,OWIN 定义了如下几个概念:

  • 服务器 (Server)

    HTTP 服务器直接与客户端交互, 并用 OWIN 语义处理请求,服务器需要一个适配层将客户请求转换 成 OWIN 语义。 支持 OWIN 的服务器有 Katana 和 Nowin 。

  • Web 框架 (Web Framework)

    构建在 OWIN 之上的自包含的独立组件, 向 Web 应用提供可用的对象模型或者接口。 Web 框架可 能需要一个适配层来转换 OWIN 语义。 支持 OWIN 的 Web 框架有:

  • Web 应用 (Web Application)

    一个特定的 Web 应用, 通常构建在 Web 框架之上, 使用 OWIN 兼容的服务器运行。

  • 中间件 (Middleware)

    特定目的的服务器和应用之间的可插拔组件, 可以监视、 路由、 修改请求与响应。

  • 宿主 (Host)

    应用与服务器所在的进程, 主要负责应用的启动, 有些服务器自身也是宿主, 比如 Nowin 。

  为什么使用 OWIN

  正如上面所说, OWIN 定义了 .NET Web 服务器与 .NET Web 应用之间的标准接口, 将应用与服务器 解耦, 使得便携式 .NET Web 应用以及跨平台的愿望成为现实, 标准的 OWIN 应用可以在任何 OWIN 兼容的服务器上运行, 不再依赖与 Windows 和 IIS 。

  怎么使用 OWIN

  OWIN 通过 NuGet 包的形式发布, 获取和使用都非常方便。 下面就先建立一个最简单的 OWIN 应用:

  1. 打开 Xamarin Studio, 新建一个 C# 命令行程序, 如下图所示:

  2. 然后打开项目属性, 确认目标框架设置为 Mono/.NET 4.5 , 如下图所示:

  3. 向项目中添加如下几个 NuGet 包:

    • Owin
    • Microsoft.Owin
    • Microsoft.Owin.Hosting
    • Microsoft.Owin.Host.HttpListener
  4. 添加一个 OWIN Startup 类, 代码如下:

    public class Startup {
    public void Configuration(IAppBuilder appBuilder) {
    appBuilder.Run(HandleRequest);
    }
    static Task HandleRequest(IOwinContext context) {
    context.Response.ContentType = "text/plain";
    return context.Response.WriteAsync("Hello, world!");
    }
    }

    OWIN 约定的处理请求的代理类型是:

    Func<IOWinContext, Task> handler

    对应上面 Startup 类的 HandleRequest 方法, 所以上面的 Startup 类就定义了一个最简单的 OWIN 应用, 向客户端输出 Hello, World!

  5. 在自动生成的 Program.cs 文件中的 Main 方法中添加如下代码, 来启动 OWIN 应用:

    class MainClass {
    public static void Main(string[] args) {
    var url = "http://localhost:8080/";
    var startOpts = new StartOptions(url) {
    };
    using (WebApp.Start<Startup>(startOpts)) {
    Console.WriteLine("Server run at " + url + " , press Enter to exit.");
    Console.ReadLine();
    }
    }
    }
  6. 现在开始运行程序, 命令行显示如下:

    打开浏览器, 访问 http://localhost:8080/ , 得到的响应如下:

  到目前为止, 没有 Windows , 更没有 IIS , OWIN 应用就能正常运行了。

OWIN初探(转)的更多相关文章

  1. 一、OWIN初探

    前言 OWIN在.NET Web Servers与Web Application之间定义了一套标准接口,OWIN的目标是用于解耦Web Server和Web Application.基于此标准,鼓励开 ...

  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. easyui 快速开发整理

    下面整理了关于easyui的datagrid的开发文档,复制黏贴即刻使用 1: <link href="../../Content/easyUI/themes/default/easy ...

  2. QQ 国际版(International version) - 关闭弹出资讯

    1,打开QQ面板,点击左下角的 "企鹅"图标.选择 "Setting". 2,在弹出的 "Setting"面板中,选择 "Priv ...

  3. zookeeper端口号冲突:8080冲突

    端口号冲突,在conf/zoo2181.cfg文件里面添加一个端口号的指定(具体的端口号可以自己定义一个): admin.serverPort=8081

  4. zepto源码研究 - deferred.js(jquery-deferred.js)

    简要:zepto的deferred.js 并不遵守promise/A+ 规范,而在jquery v3.0.0中的defer在一定程度上实现了promise/A+ ,因此本文主要研究jquery v3. ...

  5. 使用SQL除掉文本中特殊的ascll字符比如Enter,Tab,空格键

    一.在SQL查询的字段中如果包含tab.enter.空格键,可以使用ascii码进行替换: --替换了文本中含有tab键,Enter键,空格键的ascii码 select REPLACE(REPLAC ...

  6. amchart

    amchart能够根据提供的数据便捷的生成好看的图标,曾在项目中遇到使用falsh版以支持对js支持不好的低版本浏览器,但是现在官网上都是js版本的,flash版的文档都没有,搜索结果一般都是链接到博 ...

  7. python类方法与对象方法学习

    class Test_Demo: TEST = 'test_value' def __init__(self,name,age): self.name = name self.age = age #s ...

  8. 让IE支持CSS3 Media Query实现响应式Web设计

    如今的屏幕分辨率,小至320px(iPhone),大到2560px甚至更高(大显示器),变化范围极大.除了使用传统的台式机,用户会越来越多的通过手机.上网本.iPad一类的平板设备来浏览页面.这种情况 ...

  9. C语言计算机器运行时间

    //计算机器运行时间 long i = 10000000L;clock_t start, finish;double duration;//测量一个事件持续的时间printf( "Time ...

  10. 注解 @Resource与@Autowired与@Component的使用

    在java代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:@Autowired 默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才 ...