当前位置:首页 > Windows程序 > 正文

OWIN轻量型框架介绍

2021-05-25 Windows程序

静态路由的3种写法

伪静态路由的支持

处理Form表单提交的文件

流式处理Post请求的数据

多种请求类型自动识别

响应处理

请求响应上下文

自定义默认处理函数

内置各种便捷函数

复合类型的请求处理

静态内容的支持

跨域Post的支持

基础类型继承灵活处理

引言

  什么是OWIN,我就不介绍了,请自行搜索,这里主要是介绍自行开发的OWIN框架的特点和用法。由于.NET的web框架都比较庞大,导致性能总是不高,所以我才想到要在新出的OWIN协议基础上,开发一个高性能的框架,追求极限的性能,绝不发展为一个复杂低效的框架,这是这套框架的初衷。目前功能还不是很全,只能提供WebApi的功能,Razor模板要下个版本再考虑。

  如果你是一个注重程序运行效率,而不是编程方便的人,这个框架会很适合你。它在提供最高效率的同时,也极大方便了编程开发。

  下载地址:https://github.com/qldsrx/OwinFramework

框架的特色

  我用过ServiceStack,看过Nancy的代码风格,这两个框架广受好评(但性能不行),特别是编程风格上面,于是我效仿了它们。目前框架中的序列化部分,还有使用ServiceStack_V3的dll,但由于ServiceStack非常不厚道,自从收费后,免费版本的最后一个版本删了几个常用方法,收费版本直接命名空间大变样,升级直接导致项目出错,因此最终会全部自己实现,不用ServiceStack的类库。

  该框架最低要求.net4.0环境,因为需要Task类的支持。

如何启动

  调试的时候可以用自承载方式,方法和Nancy的一样,但win7以上系统需要管理员权限启动,代码如下:

static void Main(string[] args) { var url = "http://+:8080"; using (WebApp.Start<OwinLight.Startup>(url)) { Console.WriteLine("Running on {0}", url); Console.WriteLine("Press enter to exit"); Console.ReadLine(); } }

  项目最终部署推荐使用Linux+Jexus,因为Jexus会优先处理静态资源,而我的这个框架是不处理静态资源的,如果用IIS部署,需要设置经典模式并自行配置静态路径的处理映射。

* jexus部署方法:
* 1、编译得到OwinLight.dll(也可以自行改名)。
* 2、将编译得到的dll连同Owin.dll、Microsoft.Owin.dll等文件
* 一同放置到网站的bin文件夹中
* 3、在对应网站的jws网站配置文件中加入一句,声明要使用的适配器:
* OwinMain=OwinLight.dll,OwinLight.Startup
* 4、重启Jexus让配置生效。

* TinyFox部署方法:
* 1、编译得到OwinLight.dll(也可以自行改名)。
* 2、将编译得到的dll连同Owin.dll、Microsoft.Owin.dll等文件
* 一同放置到网站的bin文件夹中(site\wwwroot\bin)
* 3、默认配置文件为TinyFox.exe.config,也可以在site\wwwroot下面放web.config,优先读取web.config
* 4、运行fox.bat或fox.sh(linux),端口在启动脚本里。

 

各项功能 静态路由的3种写法

  首先来看下这样的写法:

public Demo1() { //定义静态路径处理函数,Any表示任意请求类型,Get表示只对GET请求处理,Post表示只对POST请求处理 Any["http://www.mamicode.com/"] = GetRoot; }

  这和Nancy里面里面是类似的,提供了Any、Get、Post三种属性来定义路径处理函数,不同的是,我的这个函数必须是Func<IOwinContext, Task>形式的,而不接受任何dynamic的参数。这里IOwinContext是web请求响应上下文,包含了请求和响应的各种信息。

  下面就看下GetRoot函数的示例: 

public Task GetRoot(IOwinContext context) { var x = new TaskCompletionSource<object>(); x.SetResult(null); //调用SetResult后,这个服务即转为完成状态 context.Response.ContentType = "text/html; charset=utf-8"; HttpHelper.WritePart(context, "<h1 style=‘color:red‘>您好,Jexus是全球首款直接支持MS OWIN标准的WEB服务器!</h1>"); return x.Task; }

  看到这里,你也许会觉得,这样写太麻烦了。是的,但是某些特殊场合会用的到,因此提供了这样的写法。下面介绍POCO参数方式的编程,和ServiceStack很像,但是更实用。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70806.html