博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
细说Asp.Net Web API消息处理管道(二)
阅读量:5845 次
发布时间:2019-06-18

本文共 2264 字,大约阅读时间需要 7 分钟。

      在这篇文章中,通过翻看源码和实例验证的方式,我们知道了Asp.Net Web API消息处理管道的组成类型以及Asp.Net Web API是如何创建消息处理管道的。本文在上篇的基础上进行一个补充,谈谈在WebHost寄宿方式和SelfHost寄宿方式下,请求是如何进入到Asp.Net Web API的消息处理管道的。

WebHost寄宿方式:

      在一文中,我们知道Asp.Net Web API在WebHost寄宿方式下,最终把HttpControllerHandler类型作为请求的HttpHandler。而又由于Asp.Net Web API以WebHost方式寄宿时,是利用Asp.Net环境里进行请求的处理的。请求在Asp.Net管道事件流转过程中,代表HttpHandler的HttpControllerHandler类型中的ProcessRequestAsync方法将被执行,此方法正是Asp.Net Web API消息处理管道的入口,翻看源码我们就可以验证:

 

 

       可以看到,在WebHost寄宿方式下,进入Asp.Net Web API消息处理管道的入口是HttpControllerHandler中的ProcessRequestAsync方法,默认使用HttpServer和HttpRoutingDispatcher分作作为消息处理管道的“龙头”和“龙尾”。请求在经过Asp.Net Web API消息处理管道各个节点的处理后,将响应消息逆序流转回HttpControllerHandler中,最后通过Asp.Net将响应消息返回给客户端。

      分析完WebHost寄宿方式下如何进入Asp.Net Web API消息处理管道后,下面继续看看SelfHost寄宿方式下是怎样的。

SelfHost寄宿方式:

      在继续之前,我们先看Asp.Net Web API以SelfHost方式寄宿的一个例子。新建一个控制台项目,添加名为DemoController的类:

public class DemoController : ApiController    {        public string Get()        {            return "Asp.Net WebAPI SelfHost";        }    }
class Program    {        static void Main(string[] args)        {                        HttpSelfHostConfiguration configuration = new HttpSelfHostConfiguration("http://localhost:9999/");            using (HttpSelfHostServer server = new HttpSelfHostServer(configuration))            {                server.Configuration.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}");                                server.OpenAsync();                Console.Read();            }        }    }

浏览器查看:

      现在我们就以这个Demo来开始剖析Asp.Net Web API在SelfHost寄宿方式下,是如何进入消息处理管道的。首先来看看HttpSelfHostConfiguration类型,如下,HttpSelfHostConfiguration继承至HttpConfiguration。在上面实例中,我们通过它来传入了一个地址,此地址将会被用来监听请求:

      接下来看一下HttpSelfHostServer源码,如下。HttpSelfHostServer继承至HttpServer,由此看来,HttpSelfHostServer将是Asp.Net Web API消息处理管道的“龙头”:

      Asp.Net Web API消息处理管道的“龙尾”,HttpRoutingDispatcher成为SelfHost寄宿方式下消息处理管道的“龙尾”:

      根据上面的示例代码,当完成监听端口的置顶、路由的注册后,调用HttpSelfHostServer的OpenAsync方法开始接收请求。那么,在OpenAsync方法内做了什么呢?下面我们来详细看看:

 

 

      由上面分剖析过程可以知道,在SelfHost寄宿方式下,Asp.Net Web API通过HttpBinding进行请求的监听和响应的回复。继承至HttpServer的HttpSelfHostServer直接作为消息处理管道的“龙头”。在HttpBinding的帮助下,完成请求的监听、请求进入消息处理管道进行处理、响应消息的回复等操作。

      至此,Asp.Net Web API在WebHost和SelfHost两种寄宿方式下,请求如何进入消息处理管道的剖析完成。能力有限,如果不对之处,欢迎提出指正。

转载于:https://www.cnblogs.com/wuwenmao/p/6411737.html

你可能感兴趣的文章
阿里数据中台七年演化史——行在口述干货
查看>>
10.Java异常问题
查看>>
利用Git Webhooks实现jekyll博客自动化部署
查看>>
Fescar undoExecutor介绍
查看>>
Linux命令操作大全
查看>>
从周五开始香港主机特别慢,香港主机用户有同感吗?
查看>>
Ember.js 3.9.0-beta.3 发布,JavaScript Web 应用开发框架
查看>>
python标准库00 学习准备
查看>>
4.2. PHP crypt()
查看>>
Spring Cloud Config服务器
查看>>
commonservice-config配置服务搭建
查看>>
连接池的意义及阿里Druid
查看>>
ComponentOne 2019V1火热来袭!全面支持 Visual Studio 2019——亮点之WinForm篇
查看>>
Python递归函数与匿名函数
查看>>
loadrunner安装运行一步一步来(多图)
查看>>
git请求报错 401
查看>>
监控工具htop的安装及使用
查看>>
Nodejs使用图灵机器人获取笑话
查看>>
Spring 任务调度 简单的,使用Schedule
查看>>
SQL 2005删除作业计划出错(DELETE语句与 REFERENCE约束"FK_subplan_job_id"冲突。)的解决...
查看>>