当前位置:网站首页 / C#开发 / 正文

AY C#技术学习路线 - owin

时间:2017年11月16日 | 作者 : aaronyang | 分类 : C#开发 | 浏览: 409次 | 评论 0

owin何许?一套web接口,你知道的,都基于它。AY无趣,自寻烦恼,研之学之。

以前用nodejs,写个web容器太简单了。几行代码就写了一个容器,还支持 url各种拦截啊,取参数处理等

在C#写服务端,wcf?web api吗?SignalR?第一个是微软的实现,后面2个是微软基于owin的实现,微软还有个 katana基于owin的实现,比如nancy,ASP.NET vNext等

http://owin.org/ 有兴趣了解他的背景故事吧。

====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========

blob.png

忽然觉得好高大上,当然他是很底层了。我们还是用好别人的实现就好了,当然比如katana源码改研究研究,不然以后怎么写自己的web服务器呢?


管理员方式打开vs2017

新建控制台项目,引用2-5 的dll

blob.png

我们知道http是   请求-> 中间件  more ... -> 响应

服务端       逻辑处理后(server)  一个server要启动,需要host,使用者调用方叫 client/application   就这样吧,开始吧,我们写host和server,浏览器当 client。


在program.cs下写

   //初始化StartOptions参数
            StartOptions options = new StartOptions();
            //服务器Url设置
            options.Urls.Add("http://localhost:1314");
            //Server实现类库设置
            options.ServerFactory = "Microsoft.Owin.Host.HttpListener";


            //以当前的Options和Startup启动Server
            using (WebApp.Start(options, Startup))
            {
                //显示启动信息,通过ReadLine驻留当前进程
                Console.WriteLine("Owin Host/Server started,press enter to exit it...");
                Console.ReadLine();
            }//Server在Dispose中关

        }
        private static  void Startup(Owin.IAppBuilder app)
        {

        }


这样已经可以启动了。

blob.png

不过我们没有对路由进行任何的处理,路由你不懂的话,就是一组   浏览器的 中的 网址吧,路由获得他可以再处理,行了别问我了,就是这样。大脑就是一个水管,很多水从头到尾的流淌。  一头客户,一头是服务端。

blob.png


开始写中间件Middleware吧

    public class SampleMiddleware : OwinMiddleware
    {
        object m_Options;
        public SampleMiddleware(OwinMiddleware next)
           : base(next)
        {
            //构造函数
        }
        public SampleMiddleware(OwinMiddleware next, object options)
          : base(next)
        {
            //引入参数类,并可以再类中使用
            m_Options = options;
        }
        public override Task Invoke(IOwinContext context)
        {
            PathString tickPath = new PathString("/tick");
            //判断Request路径为/tick开头
            if (context.Request.Path.StartsWithSegments(tickPath))
            {
                string content = "AYUI:"+DateTime.Now.Ticks.ToString();
                //输出答案--当前的Tick数字
                context.Response.ContentType = "text/plain";
                context.Response.ContentLength = content.Length;
                context.Response.StatusCode = 200;
                context.Response.Expires = DateTimeOffset.Now;
                context.Response.Write(content);
                //解答者告诉Server解答已经完毕,后续Middleware不需要处理
                return Task.FromResult(0);
            }
            else
                //如果不是/tick路径,那么交付后续Middleware处理
                //中间件的实现代码
                return Next.Invoke(context);
        }
    }

使用return Task.FromResult(0);  拦截继续往下 处理,及时response。

  private static  void Startup(Owin.IAppBuilder app)
        {
            //这里通过app句柄,为当前Server加入所有需要的middleware
            //加载Sample Middleware
            Console.WriteLine("Sample Middleware loaded...");
            app.Use(typeof(SampleMiddleware));
        }

接下来运行项目,打开浏览器 http://localhost:1314/tick

blob.png

你的第一个web容器来了,如果你要问我,我怎么知道代码这样写呢?

研究katana项目的代码,自己折腾的。


====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========

这个项目开源的,自己折腾学习吧。https://github.com/aspnet/AspNetKatana/  还要去研究了。

blob.png







推荐您阅读更多有关于“owin,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

作者:杨洋(AaronYang简称AY,安徽六安人)

时间:2015年1月17日,高中学历,兴趣学习研究WPF

声明:AYUI开发与商用免费,源码可购买。部分DEMO不免费

开源不是责任,合理的收入可以维护项目的发展和服务器和域名的费用。非客户加好友不提供技术服务

查看捐款记录

AYUI7.X MVC教程 更新如下:

2017-10-29 第一课
2017-10-30 第二课

AYUI程序加密教程教程下载

兼容:XP到win10,vs2015,2017

最新版本:AYUI 7.5

一次购买,免费更新,bug及时修复,AY一人开发,普通话沟通问题。3个月技术支持

AYUI7.5 DLL企业服务详情:650元

AYUI7.5.X 官方风格全源码详情:4000元

AYUI7.5.X 医疗+官方风格全源码详情:5000元

本AYUI知识版权最终归杨洋(AY)所有

本AYUI最终销售权归杨洋(AY)所有

WPF群 WPF UI之美     联系AY: 点击这里给我发消息

  AY的WPF视频
  AYUI 版本说明

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表