博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET管道
阅读量:5163 次
发布时间:2019-06-13

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

1.ASP.NET生命周期

2.Http运行时

3.Http管道技术

  a)inetinfo.exe

  b)asp.net_isapi.dll

  c)aspnet_wp.exe

  d)HttpHandler

  e)HttpModule

4.实现Httphandler的使用

 

5.ASP.NET生命周期

 

 

 

 

6.(IIS)Web服务器(inetinfo.exe):

  1.只有少数几种被客户端请求的资源类型由iis直接处理,如对Html页面,文本文件,jpeg和gif图像的传入请求

  2.对ASP.NET资源(*.aspx,*.asmx,*.ashx)的请求将传递到ASP.NET ISAPI扩展,该系统组件是一个名为

    aspnet_isapi.dll的Win32 Dll

7.aspnet_isapi.dll:可以处理多种资源类型,包括Web服务和Http处理程序调用

8.ASP.NET辅助进程(aspnet_wp.exe):

  1.由aspnet_isapi.dll负责调用

  2.aspnet_wp.exe负责控制请求的执行,并可以终止请求

9.aspnet_isapi.dll

 

 用此命令进行 注册映射表,即将*.aspx与aspnet_isapi.dll关联起来

(注意:可以添加自己的映射,如将*.Refactor与aspnet_isapi.dll关联起来,这时候请求后缀名为Refactor的文件和请求*.aspx一样)

 

 10.ISAPI与辅助进程的关系

  1.ISAPI和辅助进程间的通讯是使用一组 "命名管道" 进行的

  2.命名管道 是一种Win32机制,用于跨进程边界传输机制,命名管道的工作方式

    与管道相似:在一端传入数据,在另一端输出相同的数据.建立管道既可以连接

    本地进程,也可以连接远程计算机上运行的进程,对于本地进程间通讯,管道是

    Windows中最有效,最灵活的工具.

  3.ISAPI使用异步命名管道来将请求转发给 辅助进程并获得相应

  4.辅助进程 在需要查询有关IIS环境的信息(即服务器变量)时又使用同步管道

  5.ISAPI模块创建固定数量的 命名管道,并使用重叠的操作以通过小的线程池

    处理同一时间进行的连接.当通过管道进行的数据交换操作结束后,完成例程

    将断开客户端,并重新使用管道实例为新的客户端服务.线程池和重叠操作均

    可以保证使ASP.NET ISAPI的性能达到令人满意的水平.

    但是ASP.NET ISAPI扩展绝不会处理Http请求

11.ASP.NET的处理逻辑:

  1.当请求到达时,IIS检查资源类型并调用ASP.NET ISAPI扩展.如果启用了默认的

    进程模型,aspnet_isapi会将请求排队,并将请求分配给 辅助进程.所有的

    请求数据都是通过异步I/O发送

  2.收到请求后,ASP.NET辅助进程将通知ASP.NET ISAPI,它将为请求服务(建立管道)

  3.在辅助进程的上下文中执行请求.有时,辅助进程可能需要回调ISAPI以完成请求,也就是

    需要说枚举服务器变量.这种情况下,辅助进程将使用同步管道,因为这样可以保持

    请求处理的逻辑顺序.

  4.完成后,响应被发送到打开了异步管道的aspnet_isapi.如果aspnet_isapi检测到

    辅助进程已取消,它将自动终止请求并释放所有相关的IIS资源

 

12.ASP.NET运行时环境

  1.构成ASP.NET运行时环境的可执行文件  

  2.aspnet_filter.dll组件是一个小的Win32 ISAPI筛选器,用来备份ASP.NET应用程序的无Cookie会话状态

  3.aspnet_state.exe的作用对Web应用程序更为重要,因为他用于管理会话状态

13.Http管道

  1.在ASP.NET应用程序中,系统使用一组相关的类,通过一定的顺序来处理客户端的请求(Requset),

    ASP.NET应用程序的处理模式可称之为Http处理管道

  2.HttpModule和HttpHandler就是这个处理管道上的两个处理环节

 

下图为 灰色部分的 示意图:

 

 

14.介绍上图各个类的作用

 

  1.HttpWorkerRequest抽象类定义了ASP.NET页面处理请求的基本方法

 

  2.HttpRuntime提供了处理应用的一组服务

 

  3.HttpContext保存了处理一次请求的所有相关上下文信息

 

  4.HttpApplicationFactory提供相关目录的应用程序

 

  5.HttpApplicaiton定义了所有ASP.NET应用程序的通用的方法,属性和事件,这个类也是

 

    在用户在global.asax文件中定义的应用基类

 

  6.HttpModules处理请求前和响应后的事件

 

  7.HandlerFactories提供应用程序中的Handlers

 

  8.HttpHandlers处理请求和响应

 

15.HttpHandler

 

  1.HttpHandler处理请求(Request)的信息和发送响应(Response)

 

  2.HttpHandler实现类似于ISAPI Extention的功能

 

  3.System.Web.UI.Page类也实现了HttpHandler接口

 

  4.可以通过HttpHandler拦截请求,执行我们的自定义处理程序

 

16.HttpHandler示例

 

  1.新建一个RefactorHandler类  

public class RefactorHandler : IHttpHandler    {        public void ProcessRequest(HttpContext context)        {            HttpResponse response = context.Response;            HttpRequest request = context.Request;            //获取用户请求的文件            string filePath = request.FilePath;            if (filePath.EndsWith("Refactor"))            {                response.Write("欢迎来到我的博客:" +                               "
" + "Refactor's blog http://www.cnblogs.com/refactor "); } } public bool IsReusable { get { return true; } } }

 

   2.修改Web.config 

    在  <system.web>节点下添加: 

 

  3.测试

 

 

转载于:https://www.cnblogs.com/liangxiaofeng/p/5628341.html

你可能感兴趣的文章
WHAT I READ FOR DEEP-LEARNING
查看>>
【Ruby】Ruby在Windows上的安装
查看>>
Objective C 总结(十一):KVC
查看>>
BZOJ 3747 洛谷 3582 [POI2015]Kinoman
查看>>
vue实战(7):完整开发登录页面(一)
查看>>
Visual Studio自定义模板(二)
查看>>
【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴
查看>>
读《构建之法-软件工程》第四章有感
查看>>
使用 Printf via SWO/SWV 输出调试信息
查看>>
.net 分布式架构之分布式锁实现(转)
查看>>
吴恩达机器学习笔记 —— 3 线性回归回顾
查看>>
Problem E: Automatic Editing
查看>>
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>
一周TDD小结
查看>>
sizeof与strlen的用法
查看>>
Linux 下常见目录及其功能
查看>>
开源框架中常用的php函数
查看>>
nginx 的提升多个小文件访问的性能模块
查看>>