Self Host模式下的ASP.NET Web API与WCF非常相似,都可以寄宿在任意类型的托管应用程序中,宿主可以是Windows Form .WPF.控制台应用以及Windows Service,寄宿的请求的监听.接收 和响应功能,是通过一个类型为HttpBinding的Binding对象创建的ChannelListener管道来完成的. 一.Binding绑定模型 Binding用来创建处理和传输消息的信道栈,信道栈有一组Channel组成,Binding也由一组BindingElem…
寄宿的作用是开启一个进程为Web API提供一个运行环境以解决持续监听.请求监听和响应回复,即将接收到的请求转换成HttpRequestMessage对象传入管道,并将管道生成并经过处理后的HttpResponseMessage回复给客户端.寄宿模式分两种,即Web Host模式和Self Host模式,不同模式下采用的机制不一样,我们先来看看Web Host模式下的消息处理管道. 由前几篇可知,在Web Host模式下,是开启一个ASP.NET Web应用作为Web API的宿主,它借助ASP…
ASP.NET Web API 核心框架是一个独立的.抽象的消息处理管道,ASP.NET Web API有自己独立的路由系统,是消息处理管道的组成部分,其与ASP.NET路由系统有类似的设计,都能找到对应的类,虽然有一定区别,基本都是面向接口的,而且命名都以Http开始的,但是,其主要辑基本都一样.看这篇之前先看上一篇<ASP.NET Web API 框架研究 ASP.NET 路由> 一.涉及的类及源码分析 涉及的主要类型都在程序集“System.Net.Http.dll”和“System.W…
我们知道项目中创建的Controller,如ProductController都继承自ApiController抽象类,其又实现了接口IDisposable,所以,框架中自动调用Dispose方法来释放其资源.在代表请求的HttpRequestMessage属性字典中,有个Key,“Ms_DisposableRequestResources” ,其值是类型List<IDisposable>,用来存放待释放的资源,回顾下ApiController抽象类的方法ExecuteAsync里的代码片段.…
Web Host 模式下的路由本质上还是通过ASP.NET 路由系统来进行路由的,只是通过继承和组合的方式对ASP.NET路由系统的内部的类进行了一些封装,产生自己专用一套类结构,功能逻辑基本都是一样的. 简单的概括起来,Web Host模式下的ASP.NET Web API在Web应用中注册的路由(HostedHttpRoute)最终会转换成ASP.NET 全局路由表中的Route(HttpWebRoute),ASP.NET路由系统会对请求进行匹配,把匹配的路由变量数据存放到RequestCo…
ASP.NET Web API 的核心框架是一个由一组HttpMessageHandler有序组成的双工消息处理管道:寄宿监听到请求接受后,把消息传入该管道经过所有HttpMessageHandler处理后,目标HttpController会被激活,对应Action方法被执行,生成响应消息也会进入管道经过所有HttpMessageHandler处理,处理后消息又流回寄宿,其把响应信息返回给客户端:可以判断出消息处理管道与寄宿是相互独立的,其是一个通过一组HttpMessageHandler对请求…
在根据请求解析出匹配的Controller类型并创建实例后,要在该Controller类型中的众多Action方法中选择与请求匹配的那一个,并执行,然后返回响应. Action方法,其元数据,主要包括,ActionName,参数列表,返回类型,支持的方法,应用其上的特性,如过滤器,HttpMethod,自定义特性. 一.涉及的类及源码分析 类主要都在System.Web.Http.Controllers命名空间下 1.HttpActionDescriptor 是一个抽象类用来描述Controll…
ServicesContainer是一个服务的容器,可以理解为—个轻量级的IoC容器,其维护着一个服务接口类型与服务实例之间的映射关系,可以根据服务接口类型获取对应的服务实例.构成ASP.NET Web API核心框架的消息处理管道的每个环节都注册了相应的组件来完成某项独立的任务,这些 “标准化 ”的组件—般都实现了某个预定义的接口,如果这些原生的组件不能满足我们的需求,我们完全可以通过实现相应的接口创建自定义的组件,然后以某种形式将它们 “注册安装 ”到消息处理管道上. ASP.NET Web…
ASP.NET Web API 如果采用Web Host方式来寄宿,在请求进入Web API 消息处理管道之前,就会用ASP.NET 自身的路由系统根据注册的路由表,解析出当前请求的HttpController和Action的名称,以及与目标Action方法某个参数进行绑定的路由变量. ASP.NET路由系统包括两方面应用: 注册路由映射,即注册路由模板和物理文件的匹配关系,实现请求URL地址和处理请求的物理地址的分离,可以提高请求URL可读性,SEO优化,灵活性,即请求URL和处理请求的物理文…
一.概念 1.IoC(Inversion of Control),控制反转 即将依赖对象的创建和维护交给一个外部容器来负责,而不是应用本身.如,在类型A中需要使用类型B的实例,而B的实例的创建不是由A负责,而是由外部容器来创建. 2.DI(Dependency Injection),依赖注入 即外部容器在运行时候动态的将依赖类型的实例对象注入到应用中.其与IoC联系一起,因为IoC才需要DI.当然,实例对象也可以直接调用IoC容器的方法(如GetService)获得.DI分三种形式: 构造函数注…