暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ASP.Net之笔记07-02(Asp基础原理深入)

百变则是新 2019-07-25
115


Asp基础原理深入


1、aspnet_isapi.dll这个模块,当接收到请求时,负责启动咱们的应用程序池,启动工作进程,并负责把请求的报文发送到咱们的托管模块中来。
2、咱们的托管平台是谁与aspnet_isapi.dll这个模块进行消息的交互呢?咱们托管模块有一个ISAPIRuntime.PR()。这个PR()方法就是用来处理当前的请求的,处理完毕之后,再把响应的报文返回出去。
3、这个ISAPIRuntime.PR()有一个参数:ecb句柄。aspnet_isapi.dll通过这个句柄,可以拿到托管环境处理的响应报文。其实ecb才是连接咱们托管与非托管之间的一个入口。所以,咱们的请求报文可以通过ecb来拿到,响应报文也可以通过ecb返回。
4、ISAPIRuntime.PR(ecb句柄)方法内部,又把这个ecb句柄请求报文封装成了一个HttpWorkerRequest对象,这是一个托管的类型,是C#的一个类型。这个对象可以用来获取请求,也可以写入响应内容。这个对象是一个很原始的一个类,它是对请求报文做了最原始的封装。
5、ISAPIRuntime.PR(ecb句柄)方法把最原始的请求报文(HttpWorkerRequest对象,简写:wr)封装又传递到了 HttpRuntime.PR(wr)方法中,进行再次处理。最后wr封装成了我们现在看到的HttpContext对象。这里可以进行请求报文的获取和响应报文输出。
6、在HttpRuntime.PR(wr)方法内部通过一个HttpApplicationFactory工厂创建一个HttpApplication对象。它是负责咱们Asp.Net整个模型运作。这是一个最基本的类,也是很重要的一个类。
7、咱们AspNet是一个模型,它是一个管道模型。MSDN上公布的结果:这个管道模型有23个步骤,19个公开的事件。19个公开的事件依次被执行。事件算一个步骤。谁负责这个步骤依次向下执行的呢?就是由咱们的HttpApplication这个对象来负责,依次向下执行。咱们的HttpContext会随着这个管道步骤依次向下传递,管道中任何一个步骤,都可以拿到请求报文,也都可以向响应报文中写入内容。
8、第7个事件和第8个事件之间就是根据请求地址,创建一般处理程序或者页面对象。第11和12事件之间执行PR方法。如果创建的一般处理程序就执行一般处理程序的PR方法,如果创建的是页面对象,就执行页面对象的PR方法。执行完PR方法以后,继续沿着管道向下流动执行,最后所有执行完毕之后,返回响应内容。【重点】
9、非托管程序如何给托管程序传递数据,通过句柄是最方便的。
10、通过反编译的工具,打开.NetFramework框架的程序集,找到SystemWeb的命名空间,找到下面的System.Web.Hosting命名空间。这个命名空间下就是它AspNet底层需要的关键的类型。ISAPIRuntime类型都在这个命名空间下。


文章转载自百变则是新,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论