1. 概述

  HTTP模块和处理程序,可以让程序员直接跟HTTP请求交互。

  本章内容包括 实现同步和异步模块及处理程序以及在IIS中如何选择模块和处理程序。

2. 主要内容

  2.1 实现同步和异步模块及处理程序

    模块(Module)在处理程序执行操作之前或者之后被调用,开发人员可以藉此来操作每一次请求操作。

    创建Http模块需要实现  System.Web.IHttpModule 接口,它包含两个方法: void Init(HttpApplication) 和  void方法 Dispose。

    System.Web.HttpApplication 包含 22 个事件,可供模块根据需求去灵活操作。

    Web.Config中的httpModule节点可以用来在程序中配置http模块。

    一般的程序处理流程是:验证、URL映射、一系列事件、处理程序、一系列事件。

    Global.asax文件的核心功能就是处理应用程序事件。

    不同于模块,只有一个处理程序被用来处理一个请求。处理程序必须实现IHttpHandler接口。

    ASP.NET4.5允许同时编写模块和处理程序来处理异步请求。

private async Task ScrapePage(object caller, EventArgs e)
{
WebClient webClient = new WebClient();
var downloadresult = await webClient.DownloadStringTaskAsync("http://www.msn.com");
} public void Init(HttpApplication context)
{
EventHandlerTaskAsyncHelper helper =
new EventHandlerTaskAsyncHelper(ScrapePage);
context.AddOnPostAuthorizeRequestAsync(
helper.BeginEventHandler, helper.EndEventHandler);
}

    *使用同步模块,主线程处理整个请求,包括处理程序和模块。同一时间只能处理一个请求,而且如果当前出现数据库错误或者I/O错误,整个程序都会受影响。

    通过实现HttpTaskAsyncHandler,可以方便的实现异步处理。

public class NewAsyncHandler : HttpTaskAsyncHandler
{
public override async Task ProcessRequestAsync(HttpContext context)
{
WebClient webClient = new WebClient();
var downloadresult = await
webClient.DownloadStringTaskAsync("http://www.msn.com");
}
}

  2.2 在IIS中选择使用模块还是处理程序

    Http处理程序根据请求文件的扩展名来判断处理方式,而Http模块是基于事件的处理方式。

    抉择的依据是你需要 根据Url或者扩展名来处理请求 还是 根据一系列的规则来处理请求。

    如果需要根据URL,那就用Http处理程序。如果要实现一个事件驱动的平台,那就用Http模块。

3. 总结

  ① HTTP模块和处理程序可以插入到IIS的请求处理流程中。

  ② 同步模块包含一个init方法,可以用来给附加到请求过程中的事件设置处理程序。

  ③ 异步模块稍微复杂一些,但是使用async、await以及Task 可以方便的处理耗时过程。

  ④ 处理程序可以根据特定的URL/extension来处理请求。可以同步也可以异步,取决于其扩展的基类。

  ⑤ 如果需要根据特定的URL或者扩展名来处理请求,用处理程序比较合适;如果需要处理过程中特定的事件,用模块比较合适。

第七章 设计程序架构 之 设计HTTP模块和处理程序的更多相关文章

  1. 第六章 设计程序架构 之 设计实现WebSocket策略

    1. 概述 传统网页的通信方式是请求-响应模式,每次请求-响应都是新的连接.连接的建立和断开也是需要消耗资源的. WebSocket是基于TCP协议,实现单个连接上的双向通信. 本章内容包括: 异步读 ...

  2. 第三章 设计程序架构 之 设计实现Windows Azure 角色生命周期

    1. 概述 Windows Azure 是微软的云计算平台.用于 在微软数据中心 通过全局网络 生成.发布和管理应用程序. 本章内容包括 startup tasks 以及  实现 Start, Run ...

  3. 第七章、Ajango自带auth模块

    目录 第七章.Ajango自带auth模块 一.什么是auth auth是django自带的用户认证模块 二.auth模块的常用方法 三.拓展默认的auth_user表 第七章.Ajango自带aut ...

  4. 数据库原理 第七章 数据库设计和ER模型

    第七章讲述一个E-R设计如何转换成一个关系模式的集合以及如何在该设计中找到某些约束. 1.概念设计定义了数据库中表示的实体.实体的属性.实体之间的联系,以及实体和联系上的约束 在设计一个数据库模型的时 ...

  5. C++ Primer Plus学习:第七章

    C++入门第七章:函数-C++的编程模块 函数的基本知识 要使用C++函数,必须完成如下工作: 提供函数定义 提供函数原型 调用函数 库函数是已经定义和编译好的函数,可使用标准库头文件提供原型. 定义 ...

  6. MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

    第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就 ...

  7. MySQL性能调优与架构设计——第2章 MySQL架构组成

    第2章 MySQL架构组成 前言   麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成, ...

  8. 《Linux内核设计与实现》第七章读书笔记

    第七章.中断和中断处理 7.1中断 中断使得硬件得以发出通知给处理器.中断随时可以产生,内核随时可能因为新来到的中断而被打断. 不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标志.操作系统给 ...

  9. Laxcus大数据管理系统2.0(9)- 第七章 分布任务组件

    第七章 分布任务组件 Laxcus 2.0版本的分布任务组件,是在1.x版本的基础上,重新整合中间件和分布计算技术,按照新增加的功能,设计的一套新的.分布状态下运行的数据计算组件和数据构建组件,以及依 ...

随机推荐

  1. hdu-5750 Dertouzos(数论)

    题目链接: Dertouzos Time Limit: 7000/3500 MS (Java/Others)     Memory Limit: 131072/131072 K (Java/Other ...

  2. luogu 3812 【模板】 线性基

    线性基是一个支持在集合里插入数并查询最大子集异或值 #include<iostream> #include<cstdio> #include<cstring> #i ...

  3. Thrift之代码生成器Compiler原理及源码详细解析2

    我的新浪微博:http://weibo.com/freshairbrucewoo. 欢迎大家相互交流,共同提高技术. 2  t_generator类和t_generator_registry类 这个两 ...

  4. P1115最大子段和

    题目:https://www.luogu.org/problemnew/show/P1115 很简明的一道题: 这里用了递归分治,然而似乎还有更简单的做法(贪心). 代码如下: #include< ...

  5. Java创建对象解释

    创建对象包括两个步骤,首先为对象声明,然后为对象分配内存. (1)对象声明 格式:类名 对象名: 这里只是声明了对象,但该对象并不能够使用,原因为未分配内存空间. (2)为对象分配内存 格式:new ...

  6. 安装ubuntu+Windows双系统, Windows启动项消失

    这里主要介绍grub分区损坏的问题: 首先介绍最简单的方法, 不确定能不能成功, 但是最好先用此方法, 毕竟最简单如果解决就不用下一个方法了. 1. (1)用U盘做一个ubuntu的镜像, 开机进入U ...

  7. SpannableStringBuilder 用法浅析以及仿陌陌表情

    SpannableStringBuilder  官方文档解释:这个类可以使文本的内容和标记都可以改变.当我们要为TextView或者Edittext里面的文字加入加入一些效果,如下划线,颜色标 识,超 ...

  8. Flutter实战视频-移动电商-49.详细页_Stack制作底部工具栏

    49.详细页_Stack制作底部工具栏 一直悬浮在最下面的 Stack层叠组件.里面用Row 可以横向布局 开始 stack如果想定位就要用position去定位. 修改return返回值的这个地方 ...

  9. sfc命令

    开始—>运行—>再输入“sfc /scannow”(不含引号),“sfc”是“系统文件检测”程序,它是一个在命令提示符下使用的实用程序,只有是管理员才能使用该程序,这个程序的作用就是检测系 ...

  10. 大白话5分钟带你走进人工智能-第二十九节集成学习之随机森林随机方式 ,out of bag data及代码(2)

              大白话5分钟带你走进人工智能-第二十九节集成学习之随机森林随机方式 ,out  of  bag  data及代码(2) 上一节中我们讲解了随机森林的基本概念,本节的话我们讲解随机森 ...