OWIN初探(转)
什么是 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 应用:
打开 Xamarin Studio, 新建一个 C# 命令行程序, 如下图所示:

然后打开项目属性, 确认目标框架设置为
Mono/.NET 4.5, 如下图所示:
向项目中添加如下几个 NuGet 包:
- Owin
- Microsoft.Owin
- Microsoft.Owin.Hosting
- Microsoft.Owin.Host.HttpListener
添加一个 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!
在自动生成的 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();
}
}
}现在开始运行程序, 命令行显示如下:

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

到目前为止, 没有 Windows , 更没有 IIS , OWIN 应用就能正常运行了。
OWIN初探(转)的更多相关文章
- 一、OWIN初探
前言 OWIN在.NET Web Servers与Web Application之间定义了一套标准接口,OWIN的目标是用于解耦Web Server和Web Application.基于此标准,鼓励开 ...
- C# Owin初探 概念理解(一)
本文是阅读网上大牛的文章总结而成. 目录 1.Owin定义 2.为什么要用Owin 3.作用 4.总结 1.Owin定义 Owin是Open Web Interface For .NET.也就是.Ne ...
- OWIN初探
什么是 OWIN ? OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一 ...
- 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】
因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...
- 动态WebApi
动态WebApi实现了直接对Service的调用,其实没有跨过ApiController,只是我们自己创建出ApiController 实现主要分以下几步 一 对默认WebApi服务的替换 ApiGl ...
- 初探Asp.net5
说到Asp.net 5,确实让我有种激动的心情,微软的全力大招在一波一波的发出,也在牵动着每一个程序员的心.作为你们中的一员,在每次看到微软的新技术时,都满怀一种激动的心情,也同时希望微软在开源和跨平 ...
- ASP.NET WebApi OWIN 实现 OAuth 2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...
- ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus
ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...
- 介绍一位OWin服务器新成员TinyFox
TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇".TinyFox本身的功能是html服务器,所有的WEB应 ...
随机推荐
- (转)C# DateTime格式化大全
//c datetime 格式化 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label2 ...
- C# 导出word文档及批量导出word文档(2)
aspose.word主要是通过把读取出来的数据放到datatable里,在datable里做相应的格式的调整,再导出到word文档里.mvc和webform最后导出的语句略有不同,在mvc的cont ...
- C# TextBox控件 显示大量数据
串口通信:在使用TextBox空间显示数据时,因为要显示大量的接收到的数据,当数据量大且快速(串口1ms发送一条数据)时,使用+=的方式仍然会造成界面的卡顿(已使用多线程处理),但使用AppendTe ...
- PHP获取图片颜色值,检测图片主要颜色的代码:
<?php $i=imagecreatefromjpeg("photo3.jpg");//测试图片,自己定义一个,注意路径 for ($x=0;$x<imagesx($ ...
- laravel实现发送qq邮件
首先修改config/mail.php 'from' => [ 'address' => 'hello@example.com', 'name' => 'Example', ], 修 ...
- ios打包ipa的四种实用方法(.app转.ipa)-备
感谢大神分享这个博客 总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏->Product->Arc ...
- build.prop修改详细说明
用RE进入/system/挂载读写,找到build.prop复制到/sdcarrd进行修改比较保险.也可以挂载读写后,直接选择用文本编辑器打开,进行编辑.乱改有风险,修改需谨慎.1.# begin b ...
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数. UNICODE:wch ...
- Javascript 原型注意事项
function abc() {} abc.prototype.xx = { name: "keatkeat" } var x = new abc(); x.xx.name = & ...
- rsyslog的ommsql模块如何连接MYSQL的非标准数据库端口?
搞了我半小个时查找资料..最后,在一个官方文档中找到他... http://www.rsyslog.com/doc/ommysql.html Sample: The following sample ...