瀚海拾贝(一)HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
2013-05-06 22:52
701 查看
前言
前一段在整理邮件的时候发现几年前和CDD老师交流时的一份邮件.下面是简单摘要:“从技术角度来说,无论哪一个阵营,跟新技术都是不可避免的,也是很累的,当然作为一个程序员来说,也是必须的。要想让技术的更新对自己的影响减小,基础就必须打牢。所以,底层的东西和抽象层的东西需要下一番功夫。因为说到底,无论什么技术,无非就是架构和最终的实现,技术框架只是应用开发的一个平台一种技术,如果了解了具体的东西,技术更新对你来说就没什么影响了,或者换句话说,你要学一种新的技术,速度和效率会非常之高。”
上面一段话对自己的影响很大,可能大家在踏入“程序人生”的时候都会存在一些迷茫和彷徨。尽管我是属于那种相当热爱Proramming的一份子,但是面对万花筒般的技术分支也曾徘徊犹豫过.徘徊之余要做的事情便是夯实基础,寻找自己的兴趣与方向.对技术的迭代,以不变应万变才是王道.
正因为如此,所以也不会存在银弹之说.如果真的有银弹的话那么我信奉的是:程序=数据结构+算法
我选择的方向是Web,也相信Web终究会是互联网的未来.这篇文章简单谈一下自己对.NET平台下Web基础的一些浅解,由于自己水平有限,不足之处烦请见谅.
HTTP协议
HTTP协议是浏览器和服务器双方共同遵循的规范.是一种基于TCP/IP(传输层协议,相对应的有UDP)的"应用层协议"PS:TCP/UDP是广泛使用的网络通信协议,UDP协议具有不可靠性和不安全性,
相对来说TCP协议是基于连接和三次握手的(相对可靠与安全),然而B/S架构的网站,由于同时在线的人数会很多,如果都与服务器保持连接状态.服务器的承载是相当大的,
因而衍生出HTTP协议.简单的说:请求发起之后服务器端立刻关闭连接并释放资源.也正因为如此,HTTP协议通常被理解为”无状态”的.
当然维系"状态"的手段有很多;如 Session/Cookie等 这里暂且不多做讨论.
先来看一下典型的OSI七层模型 图解
View Code
internal static IHttpHandler GetApplicationInstance(HttpContext context) { if (_customApplication != null) { return _customApplication; } if (context.Request.IsDebuggingRequest) { return new HttpDebugHandler(); } _theApplicationFactory.EnsureInited(); _theApplicationFactory.EnsureAppStartCalled(context); return _theApplicationFactory.GetNormalApplicationInstance(context); }
最后调用的GetNormalApplicationInstance方法中对当前空闲的application数目进行判断,调用
application.InitInternal(context, this._state, this._eventHandlerMethods)方法,
this.InitModules()初始化所有的Modules,包含用户自定义的HttpModules
this._stepManager.BuildSteps(this._resumeStepsWaitCallback);//管道事件序列
贴一下源码:
internal override void BuildSteps(WaitCallback stepCallback) { ArrayList steps = new ArrayList(); HttpApplication app = base._application; bool flag = false; UrlMappingsSection urlMappings = RuntimeConfig.GetConfig().UrlMappings; flag = urlMappings.IsEnabled && (urlMappings.UrlMappings.Count > 0); steps.Add(new HttpApplication.ValidatePathExecutionStep(app)); if (flag) { steps.Add(new HttpApplication.UrlMappingsExecutionStep(app)); } app.CreateEventExecutionSteps(HttpApplication.EventBeginRequest, steps); app.CreateEventExecutionSteps(HttpApplication.EventAuthenticateRequest, steps); app.CreateEventExecutionSteps(HttpApplication.EventDefaultAuthentication, steps); app.CreateEventExecutionSteps(HttpApplication.EventPostAuthenticateRequest, steps); app.CreateEventExecutionSteps(HttpApplication.EventAuthorizeRequest, steps); app.CreateEventExecutionSteps(HttpApplication.EventPostAuthorizeRequest, steps); app.CreateEventExecutionSteps(HttpApplication.EventResolveRequestCache, steps); app.CreateEventExecutionSteps(HttpApplication.EventPostResolveRequestCache, steps); steps.Add(new HttpApplication.MapHandlerExecutionStep(app)); app.CreateEventExecutionSteps(HttpApplication.EventPostMapRequestHandler, steps); app.CreateEventExecutionSteps(HttpApplication.EventAcquireRequestState, steps); app.CreateEventExecutionSteps(HttpApplication.EventPostAcquireRequestState, steps); app.CreateEventExecutionSteps(HttpApplication.EventPreRequestHandlerExecute, steps); steps.Add(new HttpApplication.CallHandlerExecutionStep(app)); app.CreateEventExecutionSteps(HttpApplication.EventPostRequestHandlerExecute, steps); app.CreateEventExecutionSteps(HttpApplication.EventReleaseRequestState, steps); app.CreateEventExecutionSteps(HttpApplication.EventPostReleaseRequestState, steps); steps.Add(new HttpApplication.CallFilterExecutionStep(app)); app.CreateEventExecutionSteps(HttpApplication.EventUpdateRequestCache, steps); app.CreateEventExecutionSteps(HttpApplication.EventPostUpdateRequestCache, steps); this._endRequestStepIndex = steps.Count; app.CreateEventExecutionSteps(HttpApplication.EventEndRequest, steps); steps.Add(new HttpApplication.NoopExecutionStep()); this._execSteps = new HttpApplication.IExecutionStep[steps.Count]; steps.CopyTo(this._execSteps); this._resumeStepsWaitCallback = stepCallback; }
到这里想必能够使大家对ASP.NET管道机制能够有一个简单的回顾.当然还有很多地方没有详细分析.
再来总结一下IIS运行过程及ASP.NET管道机制:
Request→ (Internet ) HTTP.sys 监听 → WAS (IIS6 web Admin Service /IIS7 (Windows Activation Service) 接收请求
→(传入)Application Pool's → w3wp.exe(检查URL后缀)
→(加载)ISAPI扩展[aspnet_isapi.dll] → 注册映射
构造HttpRuntime类 →ProcessRequest方法
HttpContext实例产生(Request,Response,Session and so on…)
HttpRuntime 调用 HttpApplicationFactory加载HttpApplication对象
穿越HttpModule到达HttpHandler
简单用140个字符(即一条微博的字数
)概括:
Request→ (Internet ) HTTP.sys →(WAS)→Application Pool's → w3wp.exe→ISAPI→ Map→ (Pipeline)HttpWorkerRequest→AppDomain→HttpRuntime→ProcessRequest()→ HttpContext(Request,Response)→ HttpRuntime→HttpApplicationFactory→HttpApplication→ HttpModule→HttpHandler→EndRequest
以上为个人学习摘要,如有错误,欢迎指正!!
补充
1:刚刚看到dudu发的一个闪存,里面提到了Application pool 与 AppDomain 的区别 来自stackoverflow,希望对大家有所帮助.
2:WAS缩写在IIS6中的指的是(Web Admin Service),在IIS7中指的是(Windows Activation Service) 缩写一样.这个在写文章的时候注意到过,但是没有深入考虑. 理解不是很到位. 暂不妄下断言. 欢迎斧正!! :-)
参考资料:
/article/4779572.html
http://msdn.microsoft.com/en-us/library/system.web.httpapplication(v=vs.80).aspx
/article/5159763.html
后续
由于一些个人原因,放弃了原本在无锡相对安逸的工作,踏上了北漂之路,也希望在大环境下能够得到更多的锻炼与打磨.当然,最近也正在找工作,如果您有合适的职位,烦请介绍一下,感谢之至!!
如果你觉得本文对您有所帮助,请点击一下推荐,感谢您的阅读!!
相关文章推荐
- 瀚海拾贝(一)HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
- HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
- 【转】图解 HTTP协议/IIS 原理及ASP.NET运行机制浅析
- HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
- HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】(2)
- HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】(1)
- 【转】HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
- HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】(3)
- HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
- HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
- HTTP协议/IIS 原理及ASP.NET运行机制浅析
- HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
- HTTP协议/IIS 原理及ASP.NET运行机制浅析 转载
- HTTP协议/IIS 原理及ASP.NET运行机制浅析
- HTTP协议/IIS 原理及ASP.NET运行机制浅析
- HTTP协议/IIS 原理及ASP.NET运行机制浅析
- ASP.NET运行原理和运行机制
- 【深入ASP.NET原理系列】--ASP.NET请求管道、应用程序生命周期、整体运行机制
- Asp.net WebPages框架运行原理浅析{转}
- 【图解ASP.NET MVC运行机制理解-简易版】