Asp.net控件开发学习笔记(四)---Asp.net服务端状态管理

简介:

Asp.net请求处理构架


 


当一个客户端浏览器对IIS发起访问请求资源时(比如一个.aspx文件),Asp.net会初始化并维护一个包含了多个Response和Request的Http Session 的客户端的连接。一次典型的访问如下图:




   上图中,首先,一个请求发到IIS服务器,IIS会检查请求的扩展名,如果是aspx或者ascx文件,IIS会自动匹配到aspnet_isapi.dll来处理这个请求,如果是其他扩展名的文件,IIS会自动匹配到对应ISAPI文件来处理请求。


请求的过程会执行HttpRuntime对象,而HttpRuntiem会利用HttpApplicationFactory对象来确认当前的AppDomain并创建HttpApplication对象来处理请求。Global.asax处理的事件就是基于HttpApplication对象存在的事件。在当前Application中,当前用户的用户信息会通过HttpApplication对象的Context进行访问.接下来执行过程到了HttpModule,任何执行HttpModule的类在这时都会在程序中注册并引发他们的事件。比如Global.asax中的全局事件Session_Start和Session_End事件其实就是SessionStateModule,它实现了HttpModule.所以HttpModule的作用是实行全局的功能.


当HttpModule执行完成后,会到HttpHandler这一块,不同的请求会调用不同的HttpHandler,HttpHandler的执行方法是调用其内部的ProcessRequest()方法,ProcessRequest()方法只有一个参数,参数类型为保存了当前用户状态的HttpContext对象。然后,HttpHandler会负责利用Context.Response.Write()方法来响应当前的请求.


上面的整个处理过程都是利用了Asp.net的对对象,这些对象的关系可以简单用下图表示:


 


HttpHandler


      HttpHandler是Asp.net的处理.aspx和.asmx的构架和方法.HttpHandler允许用户在应用程序处理单个的Url或者相同的扩展名.Asp.net里面有两个Build-in的HttpHandler,如下:


     


Handler


描述


Asp.net Web Service


默认用于处理.asmx的HttpHandler


Asp.net 页面


默认用于处理.aspx的HttpHandler


 


     注意,上面的描述中用了默认,这意味这我们也可以写自己的处理.asmx或.aspx的HttpHandler实现


     Asp.net的PageHandlerFactory是用来专门为创建用于被Developer操作的Page实例的,在这个实例中会包含我们常用的用户信息,比如Session,Application,ViewState等…….


     通常情况下,HttpHandler可以是异步的,也可以使同步的。


同步的过程是指处理完整个Http请求才返回数据,而异步指处理完请求立刻返回数据.


 


Asp.net和服务端状态管理


   


Asp.net服务端状态管理是由我们最熟悉的Application和Session对象组成的,它们以集合的方式将用户信息储存在服务器.


Application是面向全局的,而Session对象是针对特定用户的.这两个对象都可以通过HttpContext对象来进行访问。


 


HttpContext对象


HttpContext提供了服务端状态管理并实现了HttpApplicationState和HttpSessionState,下面是一些HttpContext对象的属性:


 


AllErrors

Gets an array of errors accumulated while processing an HTTP request.

Application

Gets the HttpApplicationState object for the current HTTP request.

ApplicationInstance

Gets or sets the HttpApplication object for the current HTTP request.

Cache

Gets the Cache object for the current application domain.

Current

Gets or sets the HttpContext object for the current HTTP request.

Error

Gets the first error (if any) accumulated during HTTP request processing.

Handler

Gets or sets the IHttpHandler object responsible for processing the HTTP request.

Items

Gets a key/value collection that can be used to organize and share data between an IHttpModule interface and an IHttpHandler interface during an HTTP request.

PreviousHandler

Gets the IHttpHandler object for the parent handler.

Profile

Gets the ProfileBase object for the current user profile.

 


服务端状态管理总结


    通常情况下,在开发服务器控件时,尽量少用服务端的状态管理,尤其是在能够使用客户端状态管理时,就不要用服务端状态管理。但在一些情况下,客户端浏览器被限制,比如cookies被禁止,这时使用服务端状态管理还是比较方



本文转自CareySon博客园博客,原文链接:http://www.cnblogs.com/CareySon/archive/2009/10/03/1577745.html如需转载请自行联系原作者

相关文章
|
5天前
|
人工智能 量子技术 C#
【专栏】.NET 开发:开启数字化新时代
【4月更文挑战第29天】.NET开发在数字化新时代中发挥关键作用,借助跨平台能力、高性能和现代编程语言支持,如C#,助力企业实现数字化转型。通过企业级应用开发、移动应用和云计算集成,.NET加速业务流程和提升用户体验。未来,.NET将涉足AI、ML、MR/AR及量子计算,持续推动技术创新和数字化转型。开发者应提升技能,适应高性能需求,把握发展机遇。
|
5天前
|
缓存 监控 算法
【专栏】.NET 开发:实现卓越性能的途径
【4月更文挑战第29天】本文探讨了.NET开发中的性能优化,强调了理解性能问题根源和使用分析工具的重要性。基础优化包括代码优化(如减少计算、避免内存泄漏)、资源管理及选择合适算法。高级策略涉及并行编程、缓存策略、预编译(AOT)和微服务架构。持续性能测试与监控是关键,包括性能测试、监控分析和建立优化反馈循环。开发者应持续学习和实践性能优化,以构建高性能应用。
|
5天前
|
开发框架 .NET C#
【专栏】理解.NET 技术,提升开发水平
【4月更文挑战第29天】本文介绍了.NET技术的核心概念和应用,包括其跨平台能力、性能优化、现代编程语言支持及Web开发等特性。文章强调了深入学习.NET技术、关注社区动态、实践经验及学习现代编程理念对提升开发水平的重要性。通过这些,开发者能更好地利用.NET构建高效、可维护的多平台应用。
|
5天前
|
机器学习/深度学习 vr&ar 开发者
【专栏】.NET 技术:引领开发新方向
【4月更文挑战第29天】本文探讨了.NET技术如何引领软件开发新方向,主要体现在三方面:1) 作为跨平台开发的先锋,.NET Core支持多操作系统和移动设备,借助.NET MAUI创建统一UI,适应物联网需求;2) 提升性能和开发者生产力,采用先进技术和优化策略,同时更新C#语言特性,提高代码效率和可维护性;3) 支持现代化应用架构,包括微服务、容器化,集成Kubernetes和ASP.NET Core,保障安全性。此外,.NET还不断探索AI、ML和AR/VR技术,为软件开发带来更多创新可能。
|
5天前
|
物联网 vr&ar 开发者
【专栏】.NET 技术:为开发注入活力
【4月更文挑战第29天】本文探讨了.NET技术的创新,主要体现在三个方面:1) .NET Core实现跨平台开发革命,支持多种操作系统和硬件,如.NET MAUI用于多平台UI;2) 性能提升与生产力飞跃,C#新特性简化编程,JIT和AOT优化提升性能,Roslyn提供代码分析工具;3) 引领现代化应用架构,支持微服务、容器化,内置安全机制。未来,.NET 7将带来更多新特性和前沿技术整合,如量子计算、AI,持续推动软件开发创新。开发者掌握.NET技术将赢得竞争优势。
|
5天前
|
人工智能 前端开发 Cloud Native
【专栏】洞察.NET 技术的开发趋势
【4月更文挑战第29天】本文探讨了.NET技术的三大发展趋势:1) 跨平台与云原生技术融合,通过.NET Core支持轻量级、高性能应用,适应云计算和微服务;2) 人工智能与机器学习的集成,如ML.NET框架,使开发者能用C#构建AI模型;3) 引入现代化前端开发技术,如Blazor,实现前后端一致性。随着.NET 8等新版本的发布,期待更多创新技术如量子计算、AR/VR的融合,.NET将持续推动软件开发的创新与进步。
|
5天前
|
开发框架 物联网 测试技术
【专栏】.NET 开发:打造领先应用的基石
【4月更文挑战第29天】本文探讨了.NET开发框架为何成为构建领先应用的首选。高性能与稳定性是.NET的核心优势,它采用先进的技术和优化策略,如.NET Core的轻量级设计和JIT/AOT编译模式。跨平台兼容性让开发者能用相同代码库在不同操作系统上构建应用。现代化的开发体验,如C#语言的创新特性和Visual Studio的强大工具,提升了开发者生产力。丰富的生态系统和广泛支持,包括庞大的开发者社区和微软的持续投入,为.NET提供了坚实后盾。
|
5天前
|
人工智能 前端开发 Devops
【专栏】洞察.NET 技术在现代开发中的作用
【4月更文挑战第29天】本文探讨了.NET技术在现代软件开发中的核心价值、应用及挑战。.NET提供语言统一性与多样性,强大的Visual Studio工具,丰富的类库,跨平台能力及活跃的开发者社区。实际应用包括企业级应用、Web、移动、云服务和游戏开发。未来面临性能优化、容器化、AI集成等挑战,需持续创新。开发者应深入理解.NET,把握技术趋势,参与社区,共创美好未来。
|
5天前
|
机器学习/深度学习 人工智能 开发者
【专栏】.NET 技术:为开发带来新机遇
【4月更文挑战第29天】本文探讨了.NET技术如何为软件开发带来新机遇,分为三个部分:首先,.NET的跨平台革命,包括.NET Core的兴起、Xamarin与.NET MAUI的移动应用开发、开源社区的推动及性能优化;其次,介绍了云服务与微服务架构的集成,如Azure云服务、微服务支持、DevOps与CI/CD,以及Docker容器化;最后,讨论了AI与机器学习集成,如ML.NET、认知服务、TensorFlow和ONNX,使开发者能构建智能应用。面对这些机遇,开发者应不断学习和适应新技术,以创造更多价值。
|
5天前
|
算法 Java 编译器
【专栏】.NET 开发:实现高效能的秘诀
【4月更文挑战第29天】本文探讨了提升.NET应用性能的三个方面:理解.NET运行时(垃圾回收、JIT编译器、异步编程和线程并发)、优化代码与算法(代码细节、数据结构选择和算法效率)以及利用工具和框架(性能分析工具、高性能库和CI/CD流程)。通过深入学习、合理设计和有效工具,开发者可实现.NET应用的高效能。