浅谈ASP.NET应用
创始人
2024-04-18 04:31:21
0

当一个请求到来时,它被路由到ISAPIRuntime.ProcessRequest() 方法.这个方法调用HttpRuntime.ProcessRequest方法,它作一些重要的事情(用Reflector查看 System.Web.HttpRuntime.ProcessRequestInternal方法):
◆为请求创建一个新的HttpContext实例
◆获取一个HttpApplication实例
◆调用HttpApplication.Init()方法来设置管道的事件
◆Init()方法触发开始ASP.NET管道处理的HttpApplication.ResumeProcessing()方法。

介绍ASP.NET应用,首先一个新的HttpContext对象被创建并用来传递ISAPIWorkerRequest(ISAPI ECB的包装器).这个上下文在整个请求的生命周期总都是可用的并总可以通过静态属性HttpContext.Currect来访问.正像名字所暗示的那样,HttpContext对象代表了当前活动请求的上下文因为他包含了在请求生命周期中所有典型的你需要访问的重要对象:Request,Response,Application,Server,Cache.在请求处理的任何时候 HttpContext.Current给你访问所有这些的能力.

HttpContext对象也包含一个非常有用的Items集合,你可以用它来保存针对特定请求的数据.上下文对象在请求周期的开始时被创建,在请求结束时被释放,所有在Items集合中保存的数据只在这个特定的请求中可用.一个很好的使用的例子是请求日志机制,当你通过想通过在 Global.asax中挂接Application_BeginRequest和Application_EndRequest方法记录请求的开始和结束时间(象在列表3中显示的那样).HttpContext对你就非常有用了-如果你在请求或页面处理的不同部分需要数据,你自由的使用它.

 

  1. protected void Application_BeginRequest(Object sender, EventArgs e)  
  2. {  
  3. //*** Request Logging  
  4. if (App.Configuration.LogWebRequests)  
  5. Context.Items.Add("WebLog_StartTime",DateTime.Now);  
  6. }  
  7.  
  8. protected void Application_EndRequest(Object sender, EventArgs e)  
  9. {  
  10. // *** Request Logging  
  11. if (App.Configuration.LogWebRequests)  
  12. {  
  13. try  
  14. {  
  15. TimeSpan Span = DateTime.Now.Subtract( (DateTime) Context.Items["WebLog_StartTime"] );  
  16. int MiliSecs = Span.TotalMilliseconds;  
  17. // do your logging  
  18. WebRequestLog.Log(App.Configuration.ConnectionString,true,MilliSecs);  
  19. }  
  20. }  


一旦上下文被设置好,ASP.NET需要通过HttpApplication对象将收到的请求路由到适合的应用程序/虚拟目录.每个ASP.NET应用程序必须被设置到一个虚拟目录(或者Web根目录)而且每个”应用程序”是被单独的处理的。

HttpApplication类似仪式的主人-它是处理动作开始的地方。

域的主人:HttpApplication

每个请求都被路由到一个HttpApplication对象上.HttpApplicationFactory类根据应用程序的负载为你的 ASP.NET应用创建一个HttpApplication对象池并为每个请求分发HttpApplication对象的引用.对象池的大小受 machine.config文件中ProcessModel键中的MaxWorkerThreads设置限制,默认是20个(译注:此处可能有误,根据 Reflector反编译的代码,池的大小应该是100个,如果池大小小于100,HttpApplicationFactory会创建满100个,但是考虑到会有多个线程同时创建HttpApplication的情况,实际情况下有可能会超过100个)。

【编辑推荐】

  1. ASP.NET中的HttpWorkerRequest对像
  2. 详解四个ASP.NET状态
  3. ASP.NET AJAX中ScriptManager控件
  4. SuperPreview会调用ASP.NET或者PHP来渲染网页
  5. ASP.NET中的ScriptManager控件

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...