asp.net 运行principle 体会

本文详细介绍了ASP.NET在IIS上的运行流程,包括IIS如何处理.aspx请求、启动工作进程及加载CLR,深入探讨了非托管与托管环境间的通信机制,并解释了请求如何最终传递给HTTPHandler。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     因为觉的从今后要跟微软的东西打交道了,所以现在开始疯狂的学习.net,就从aspnet开始了。

 

    当然aspnet要运行,离不开IIS,实际上网站能运行是建立在IIS和netframework的基础上,汗 好像在说废话。

    浏览器端发出的请求被IIS截获,接下来的流程大概是

    IIS收到扩展名为.aspx请求后,加载ASP.NET ISAPI---"aspnet_isapi.dll",ASP.NET ISAPI 会启动一个名为"aspnet_wp.exe"的工作进程,“aspnet_wp.exe”启动时会加载CLR、创建appDomain,在创建对appDomain时会实例化一个名为ISAPIRuntime类,ISAPIRuntime是Asp.net与asp.net ISAPI通信的桥梁。

   IIS与ASP.NET ISAPI都是非托管程序,而ASP.NET  HttpRuntime则是一个托管程序,ASP.NET ISAPI 通过COM的方式与ASP.NET Http Runtime基于命名管道通信。ISAPIRuntime是一个特殊的类,它实现接口IISAPIRuntime,该接口基于COM。所以说非托管程序可以以COM的方式访问。

   非托管代码调用isapiruntime.ProcessRequest()方法

   ASP.NET ISAPI 调用 ISAPIRumtime  ProcessRequest 方法的,这时就到了托管环境的天下  

   在ProcessRequest 方法中每个请求得到一个isapiworkerrequest

  并且把isapiworkerrequest当做参数传递给httpruntime.ProcessRequest方法

   在httpruntime.ProcessRequest方法中

  通过传递进来的workerrequest创建HttpContext对象

   创建HttpApplication并把HttpContext作为参数传递给HttpApplication

   调用HttpApplication.initi()启动管道事件序列,勾住模块和处理器

   调用HttpApplication.ProcessRequest()方法

 

  上面说的一堆都是底层的,实际上就是要把请求传递给处理这个请求的httphandler,但是在到达httphandler前这个请求要经过一系列的httpmoduls,这个httpmodule对请求请求安全或者其他方面的过滤和修改。

   以aspx页面为例,当处理aspx的handler的处理过程。pagehanlder中请求aspx特面,然后asp引擎处理这个页面,把页面转换成类对象,这个类对象暂时就缓存在内存中了,当下次页面请求时,如果是相同的页面,那么直接取内存中取类对面的然后输出,如果这个页面设置的缓存,则将类对象缓存在aspnet缓存区中。当下次刷新页面时,则直接从缓存取对象输出。

 

mark 下,不管对不对,等过段时间再来估计理解会更深点吧。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值