asp.net 运行principle 体会

来源:互联网 发布:淘宝怎么看自己的等级 编辑:程序博客网 时间:2024/05/18 01:31

     因为觉的从今后要跟微软的东西打交道了,所以现在开始疯狂的学习.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 下,不管对不对,等过段时间再来估计理解会更深点吧。

 

原创粉丝点击