Understanding ASP.NET Under The Cover - Miguel A. Castro

10,195 views
10,102 views

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
10,195
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
143
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Understanding ASP.NET Under The Cover - Miguel A. Castro

  1. 1. UNDERSTANDING ASP.NETUNDER THE COVERS<br />Miguel A. Castro<br />miguel.castro@idesign.net<br />
  2. 2. Agenda<br />Defining ASP.NET<br />Terms & Buzzwords<br />A Request-to-Response Walkthrough<br />Additional Technologies<br />Summary<br />
  3. 3. ineta<br />Miguel A. Castro<br /><ul><li>.NET Architect, Developer, & Trainer
  4. 4. Microsoft MVP
  5. 5. ASP Insider
  6. 6. Member of the INETA Speakers Bureau
  7. 7. Conference Speaker
  8. 8. Creator of CodeBreeze
  9. 9. In IT business since 1986</li></li></ul><li>Agenda<br />Defining ASP.NET<br />Terms & Buzzwords<br />A Request-to-Response Walkthrough<br />Additional Technologies<br />Summary<br />
  10. 10. Classic ASP<br />Interpreted language<br />Included embedded scripting code mixed into HTML<br />Limited to VBScript<br />Ran in the same process as IIS<br />Inherently not scalable (needed MTS)<br />End of line<br />
  11. 11. Classic ASP<br />End of line<br />
  12. 12. Walking Upright<br />Designed by Scott Guthrie & Mark Anders<br />Early iteration of ASP.NET<br />Originally known as XSP<br />Not .NET-related – Java based !<br />Became ASP+ with the design of the CLR<br />Rewritten in C#<br />Renamed when .NET branding introduced<br />End of line<br />
  13. 13. What is ASP.NET<br />A framework for developing and delivering information & applications on the web.<br />Known primarily as a page framework.<br />A complete Request/Response management system.<br />Can handle and respond to all sorts of requests on the Internet (or an Intranet).<br />Not a language !<br />End of line<br />
  14. 14. Characteristics of ASP.NET<br />Runs under its own worker process.<br />No longer tied to IIS.<br />Code execution managed by CLR.<br />Code-Behind model allows code separation.<br />Includes state handling facilities.<br />Provides caching functionality.<br />End of line<br />
  15. 15. Agenda<br />Defining ASP.NET<br />Terms & Buzzwords<br />A Request-to-Response Walkthrough<br />Additional Technologies<br />Summary<br />
  16. 16. Commonly Used Terms<br />Request<br />An HTTP query initiated by a client to a server for the purpose of performing some action.<br />Response<br />A stream of information sent back to a client from the HTTP server that processed the client’s request.<br />ASP.NET Pipeline<br />A series of extensible functionality points which continue the process of a request in order to eventually obtain a response.<br />End of line<br />
  17. 17. Commonly Used Terms<br />Page Lifecycle<br />Another series of functionality points that form the process of converting an ASPX page to HTML output.<br />The entire page lifecycle occurs between two pipeline points.<br />Control Model<br />The heart of how ASP.NET builds HTML from compiled classes that represent visual components.<br />End of line<br />
  18. 18. Commonly Used Terms<br />HTTP Handlers<br />Classes that are the target of HTTP requests.<br />Assigned by file extension & verb.<br />Map to ISAPI Extensions<br />HTTP Modules<br />Classes that inject mode into the pipeline.<br />Map to ISAPI Filters<br />MVC<br />An design pattern that separates the output design from the information that builds it.<br />End of line<br />
  19. 19. Agenda<br />Defining ASP.NET<br />Terms & Buzzwords<br />A Request-to-Response Walkthrough<br />Additional Technologies<br />Summary<br />
  20. 20. What Everyone Sees<br />Desktop Browser<br />Web Server (IIS)<br />http://www.microsoft.com/default.aspx<br />Rendered HTML<br />Now the long version…<br />End of line<br />
  21. 21. Getting it to .NET (the low level stuff)<br />Web Server (IIS)<br />Web Server (IIS)<br />Kernel Mode Driver:Http API used by IIS<br />http.sys<br />Worker Process(w3wp.exe) – (one per app pool)<br />Worker Process started (one per pool) and if needed, AppDomain is created.<br />aspnet_isapi.dll<br />AppDomain<br />(one per site/VD)<br />Attached to the extension of the request.<br />Unmanaged DLL that loads the CLR and routes requests to the managed runtime classes via COM-compliant interfaces. <br />ISAPIRuntime(ProcessRequest method)<br />HttpRuntime.ProcessRequest<br />Request sent to the ASP.NET runtime for processing.<br />End of line<br />
  22. 22. ASP.NET Takes Over<br />HttpRuntime.ProcessRequest <br />Accessible from now until the end of the request processing. Accessible through HttpContext.Current<br />HttpContext created.<br />This serves as an entry point into the request, response, and other accessible variables.<br />Each AppDomain manages multiple instances so they do not conflict with each other (different users or same user with more than one request).<br />An HttpApplication instance is created.<br />HttpApplication<br />This is where it starts to mean something to you, the developer.<br />Init method starts pipeline processing.<br />End of line<br />
  23. 23. Entering the Pipeline<br />Pipeline kicked off in the Init method.<br />HttpApplication<br />BeginRequest<br />Performs event processing.<br />AuthenticateRequest / Post<br />AuthorizeRequest / Post<br />Checks hooks from Global.asax class.<br />ResolveRequestCache / Post<br />Checks hooks from external HTTP Modules.<br />MapRequestHandler / Post<br />AcquireRequestState / Post<br />PreRequestHandlerExecute / Post<br />ReleaseRequestState / Post<br />UpdateRequestCache / Post<br />LogRequest / Post<br />EndRequest<br />PreSendRequestHeaders<br />PreSendRequestContent<br />End of line<br />
  24. 24. Entering the Pipeline<br />HttpApplication<br />BeginRequest<br />AuthenticateRequest / Post<br />AuthorizeRequest / Post<br />ResolveRequestCache / Post<br />MapRequestHandler / Post<br />AcquireRequestState / Post<br />PreRequestHandlerExecute / Post<br />ReleaseRequestState / Post<br />UpdateRequestCache / Post<br />LogRequest / Post<br />EndRequest<br />PreSendRequestHeaders<br />PreSendRequestContent<br />End of line<br />
  25. 25. Pipeline Events of Interest<br />HttpApplication<br />Provide URL-Rewriting functionality.<br />BeginRequest<br />AuthenticateRequest / Post<br />Repopulate HttpContext.Current.User with stored principal.<br />Page authentication occurs here.<br />AuthorizeRequest / Post<br />ResolveRequestCache / Post<br />MapRequestHandler / Post<br />AcquireRequestState / Post<br />PreRequestHandlerExecute / Post<br />Determine whether to use cached response.<br />ReleaseRequestState / Post<br />UpdateRequestCache / Post<br />Any event can be hooked in Global.asax or in an HTTP Module.<br />LogRequest / Post<br />EndRequest<br />PreSendRequestHeaders<br />PreSendRequestContent<br />End of line<br />
  26. 26. HTTP Modules<br />Classes that implement IHttpModule.<br />MyModule : IHttpModule<br />Delegate-based Properties in HttpApplication instance can be wired up.<br />Method functionality equivalent to hooking event in Global.asax<br />Event hooks in modules checked during pipeline processing.<br />End of line<br />
  27. 27. AuthenticateRequest<br />WindowsAuthenticationModule<br />FormsAuthenticationModule<br />UrlAuthenticationModule<br />FileAuthorizationModule<br />ServiceModel<br />SessionStateModule<br />OutputCacheModule<br />AuthenticateRequest<br />EndRequest<br />AuthorizeRequest<br />AuthorizeRequest<br />PostAuthenticateRequest<br />AcquireRequestState<br />AcquireRequestState<br />ReleaseRequestState<br />EndRequest<br />ASP.NET HTTP Modules of Interest<br />End of line<br />
  28. 28. Module Installation<br />Any level in the Config chain<br />You do know what the Config chain is, right?<br />End of line<br />
  29. 29. The Process Continues<br />HttpApplication<br />Just before this event:<br />Proper HTTP Handler located based on request’s extension.<br />BeginRequest<br />AuthenticateRequest / Post<br />Handlers provide necessary processing in order to create a response.<br />AuthorizeRequest / Post<br />ResolveRequestCache / Post<br />MapRequestHandler / Post<br />AcquireRequestState / Post<br />PreRequestHandlerExecute / Post<br />ReleaseRequestState / Post<br />UpdateRequestCache / Post<br />LogRequest / Post<br />EndRequest<br />PreSendRequestHeaders<br />PreSendRequestContent<br />End of line<br />
  30. 30. HTTP Handlers<br />Classes that implement IHttpHandler.<br />Determines if the handler instance can be reused by another request.<br />MyHandler : IHttpHandler<br />Functionality assigned to this particular handler.<br />Remember the HttpContext contains all accessible variables, including Response.<br />End of line<br />
  31. 31. HTTP Handler Factories<br />Can also implement IHttpHandlerFactory.<br />Allows the instantiation of any handler based on specific conditioning scenarios.<br />MyHandlerFactory : IHttpHandlerFactory<br />End of line<br />
  32. 32. Characteristics of an HTTP Handler<br />Access to current HttpContext.<br />Request is in there (as is the Response) !<br />Handlers are wired to extensions (aspx, etc.).<br />Every handler is responsible for what the response is going to be for a request.<br />ASPX requests expect an HTML response.<br />Config requests expect a “forbidden” response.<br />End of line<br />
  33. 33. Handler Execution<br />HttpApplication<br />BeginRequest<br />AuthenticateRequest / Post<br />AuthorizeRequest / Post<br />The determined handler is processed between the PreRequestHandlerExecute and PostRequestHandlerExecute.<br />ResolveRequestCache / Post<br />MapRequestHandler / Post<br />AcquireRequestState / Post<br />PreRequestHandlerExecute / Post<br />ReleaseRequestState / Post<br />UpdateRequestCache / Post<br />LogRequest / Post<br />EndRequest<br />PreSendRequestHeaders<br />PreSendRequestContent<br />End of line<br />
  34. 34. Handler Installation<br />Handler factory that returns and executes the handler that will convert an ASPX page to HTML output.<br />Any level in the Config chain<br />End of line<br />
  35. 35. The PageHandlerFactory Class<br />Implements IHttpHandlerFactory.<br />GetHandler method returns an IHttpHandler in the form of System.Web.UI.Page-derived class hierarchy.<br />Page class implements IHttpHandler.<br />Page class inherits from Control.<br />Control contains events/methods for the “Page Event Lifecycle”.<br />PageHandlerFactory creates a class structure out of your request.<br />End of line<br />
  36. 36. Page Class Structure<br />Follows the structure of an ASP.NET Server Control.<br />Referred to as Page-Gen Class.<br />Created by the PageHandlerFactory class<br />Virtual class created from ASPX page.<br />Controls created based on ASPX content.<br />inherits<br />Partial class with control declarations (class name same as code-behind).<br />partials with<br />Code-behind class is other side of partial class.<br />This is why you can tap into events from your code-behind.<br />inherits<br />ProcessRequest method calls lifecycle events in Control.<br />System.Web.UI.Page<br />inherits<br />implements<br />System.Web.UI.Control<br />IHttpHandler<br />End of line<br />
  37. 37. Page Class Structure<br />Created by the PageHandlerFactory class<br />Virtual class created from ASPX page.<br />inherits<br />Partial class with control declarations (class name same as code-behind).<br />partials with<br />Code-behind class is other side of partial class.<br />inherits<br />System.Web.UI.Page<br />inherits<br />implements<br />System.Web.UI.Control<br />IHttpHandler<br />End of line<br />
  38. 38. Virtual Class<br />Created from ASPX content<br />Determines language to be used to generate page-gen class.<br />Specifies the partial class to serve as the code-behind.<br />Optional:<br />Name of the code-file for Visual Studio.<br />End of line<br />
  39. 39. Virtual Class<br />Created from ASPX content<br />LiteralControl<br />Converted to instances of System.Web.UI.LiteralControl<br />that are added to the control tree of this class.<br />Remember, this class will ultimately inherit from System.Web.UI.Control<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />End of line<br />
  40. 40. Virtual Class<br />Created from ASPX content<br />LiteralControl<br />LiteralControl<br />Program code directly added to virtual class.<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />End of line<br />
  41. 41. Virtual Class<br />Created from ASPX content<br />LiteralControl<br />Converted to instances of the corresponding server control class for each of these control tags, that will be added to the control tree of this class.<br />LiteralControl<br />The Form control instance is placed directly in the control tree of the class being created; while the TextBox and Label controls are added to the control tree of the Form control.<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />End of line<br />
  42. 42. Virtual Class<br />Created from ASPX content<br />LiteralControl<br />“asp” tag-prefix located in config file or Register directive.<br />LiteralControl<br />Class with tag name located in appropriate namespace and assembly.<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />End of line<br />
  43. 43. Virtual Class<br />Created from ASPX content<br />__PAGE System.Web.UI.Page<br />LiteralControl<br />ctrl0 System.Web.UI.LiteralControl<br />LiteralControl<br />Function Code<br />Remember: this class “ultimately” inherits from System.Web.UI.Page<br />ctrl1 System.Web.UI.LiteralControl<br />form1 System.Web.UI.HtmlControls.HtmlForm<br />LiteralControl<br />ctrl2 System.Web.UI.LiteralControl<br />Control IDs<br />TextBox1 System.Web.UI.WebControls.TextBox<br />LiteralControl<br />ctrl3 System.Web.UI.LiteralControl<br />LiteralControl<br />Label1 System.Web.UI.WebControls.Label<br />ctrl4 System.Web.UI.LiteralControl<br />LiteralControl<br />ctrl5 System.Web.UI.LiteralControl<br />LiteralControl<br />End of line<br />
  44. 44. Virtual Class<br />Created from ASPX content<br />LiteralControl<br />LiteralControl<br />This is the next class you’ll see now.<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />LiteralControl<br />End of line<br />
  45. 45. Page Class Structure<br />Created by the PageHandlerFactory class<br />Virtual class created from ASPX page.<br />inherits<br />Partial class with control declarations (class name same as code-behind).<br />partials with<br />Code-behind class is other side of partial class.<br />inherits<br />System.Web.UI.Page<br />inherits<br />implements<br />System.Web.UI.Control<br />IHttpHandler<br />End of line<br />
  46. 46. Partial Class<br />Base for virtual class and partial to code-behind<br />Notice the name is the same as the page’s code-behind class.<br />End of line<br />
  47. 47. Page Class Structure<br />Created by the PageHandlerFactory class<br />Virtual class created from ASPX page.<br />inherits<br />Partial class with control declarations (class name same as code-behind).<br />partials with<br />Code-behind class is other side of partial class.<br />inherits<br />System.Web.UI.Page<br />inherits<br />implements<br />System.Web.UI.Control<br />IHttpHandler<br />End of line<br />
  48. 48. Code-Behind Class<br />Other side of the Control Declarations class<br />Inheriting from Page gives you access to a control’s event lifecycle.<br />End of line<br />
  49. 49. Page Class Structure<br />Created by the PageHandlerFactory class<br />Virtual class created from ASPX page.<br />Remember, this entire class hierarchy is the handler returned by the PageHandlerFactory class.<br />It is the HttpApplication pipeline that calls ProcessRequest, kicking off the Page Lifecycle.<br />inherits<br />Partial class with control declarations (class name same as code-behind).<br />ProcessRequest comes from here. It is from there that the lifecycle events are called.<br />Events for the lifecycle come from here.<br />partials with<br />Code-behind class is other side of partial class.<br />inherits<br />System.Web.UI.Page<br />inherits<br />implements<br />System.Web.UI.Control<br />IHttpHandler<br />End of line<br />
  50. 50. Page (Control) Lifecycle<br />PreInit<br />Init<br />InitComplete<br />CreateChildControls (IsPostBack)<br />LoadViewState/LoadControlState<br />IPostBackDataHandler.LoadPostData<br />PreLoad<br />Load<br />IPostBackDataHandler.RaisePostBackChangedEvent<br />IPostBackEventHandler.RaisePostBackEvent<br />LoadComplete<br />CreateChildControls (!IsPostBack)<br />PreRender<br />DataBind<br />PreRenderComplete<br />SaveViewState/SaveControlState<br />Render<br />Unload<br />Complete List<br />End of line<br />
  51. 51. Most Commonly Known Points<br />Postback only<br />Initialize:OnInit method and Init event<br />Begin tracking ViewState:TrackViewState method<br />Load View State:LoadViewState method<br />Load Postback Data:IPostBackDataHandler.LoadPostdata method<br />Load: OnLoad method and Load event<br />Raise Changed Events:IPostBackDataHandler.RaisePostBackChangedEvent method<br />Raise Postback Event:IPostBackEventHandler.RaisePostBackEvent method<br />PreRender:OnPreRender method and PreRender event<br />Save View State:SaveViewState method<br />Render: Render method<br />Unload:OnUnload method and Unload event<br />End of line<br />
  52. 52. Control Rendering<br />Activated through the Control class’ Render method.<br />Each control is designed to output something to the response buffer.<br />Most controls output HTML.<br />Some controls contain others in their tree.<br />Control rendering involves recursively rendering child controls.<br />Controls don’t need to output anything<br />ScriptManager<br />End of line<br />
  53. 53. Getting a Response<br />“Rendering” uses an HtmlTextWriter stored in the Response object.<br />Response object is part of HttpContext.<br />Writer sent into Render method.<br />After pipeline complete, contents returned up the chain to aspnet_isapi.dllthen http.sys.<br />Results viewed on browser.<br />End of line<br />
  54. 54. Getting a Response<br />You can intercept and/or write directly to the response using Response.Write.<br />Remember classic ASP?<br />Response.WriteFile can be used to output binary information.<br />Can change content type for compatibility with any type of file.<br />Inform browser what’s coming.<br />End of line<br />
  55. 55. Agenda<br />Defining ASP.NET<br />Terms & Buzzwords<br />A Request-to-Response Walkthrough<br />Additional Technologies<br />Summary<br />
  56. 56. Postbacks<br />Invoked by controls on form that trigger the form to “post”.<br />Another HTTP Request, but of a post-type.<br />Certain lifecycle methods only invoked on postback only.<br />In a postback, the Request object’s Form property contains posted data from HTML elements (using their client IDs).<br />
  57. 57. Postbacks<br />Postback only<br />Initialize:OnInit method and Init event<br />Begin tracking ViewState:TrackViewState method<br />Load View State:LoadViewState method<br />Load Postback Data:IPostBackDataHandler.LoadPostdata method<br />Load: OnLoad method and Load event<br />Raise Changed Events:IPostBackDataHandler.RaisePostBackChangedEvent method<br />Raise Postback Event:IPostBackEventHandler.RaisePostBackEvent method<br />PreRender:OnPreRender method and PreRender event<br />Save View State:SaveViewState method<br />Render: Render method<br />Unload:OnUnload method and Unload event<br />End of line<br />
  58. 58. ASCX User Controls<br />Register directive defines tag prefix and name for user control.<br />src points to an ascx file in the current web application.<br />During parsing, virtual class is built just like a page, except the base is called UserControl.<br />Also, added to Page’s Controls collection.<br />UserControl also inherits from Control but does NOT implement IHttpHandler.<br />Usage in an ASPX page (or another ASCX control) is just like a server control.<br />End of line<br />
  59. 59. Master Pages<br />Code-Behind class inherits from MasterPage, which inherits from UserControl.<br />Master directive similar to a Page directive.<br />ASPX page points to a master page file.<br />End of line<br />
  60. 60. Master Pages<br />Control that specifies content to be defined in an ASPX page.<br />Control that wraps content.<br />Each Content control corresponds to a ContentPlaceHolder control.<br />End of line<br />
  61. 61. Master Pages<br />Web Server (IIS)<br />Desktop Browser<br />Browse to Default.aspx<br />PageHandlerFactory commences building of virtual class.<br />MasterPageFile attribute encountered.<br />Parsing shifts to master page file and code-behind.<br />Control tree build and added to virtual class.<br />Parsing returns to ASPX page and Content controls turned to code.<br />Each Content control added to the Controls collection of corresponding ContentPlaceHolder control.<br />End of line<br />
  62. 62. Direct Browsing<br />Note: you cannot browse directly to an ASCX control or a Master page.<br />End of line<br />
  63. 63. ASHX Handlers<br />SimpleHandlerFactory in charge of returning HTTP Handler.<br />End of line<br />
  64. 64. ASHX Handlers<br />PageHandlerFactory:<br />Parses ASPX file, building virtual class as an HTTP Handler, with ProcessRequest kicking off page lifecycle.<br />SimpleHandlerFactory:<br />Takes this handler code and returns is as HTTP Handler.<br />ProcessRequest called in the pipeline as always.<br />End of line<br />
  65. 65. Themes & Skins<br />Contain server control declarations (without IDs) whose properties overwrite those declared on the ASPX page.<br />Control “registration” applies.<br />Either in skin file or in config file.<br />Applied just before Init lifecycle event.<br />Programmatic application MUST be made in PreInit event.<br />Application using Theme attribute occurs last.<br />Application using StyleSheetTheme attribute occurs first.<br />End of line<br />
  66. 66. ASP.NET Ajax<br />More interactive model.<br />Uses JavaScript to invoke Ajax requests.<br />Web Service (WCF) technology can be used to handle response.<br />Ships with controls and components that encapsulate functionality.<br />Ajax Control Toolkit – ships separately<br />Community driven and supported<br />Undergoes Microsoft Scrutiny<br />Better user experience.<br />End of line<br />
  67. 67. ASP.NET MVC<br />Process nearly identical to conventional ASP.NET.<br />It’s still ASP.NET<br />Uses a URL routing engine to parse URLs and invoke appropriate classes.<br />http://site/controller/action/id<br />Pipeline is intercepted by a module tapping into PostResolveRequestCache event.<br />Request is picked up by another handler for processing.<br />Controller classes are sought out and processed (similar to code-behind classes).<br />Appropriate Views parsed and rendered.<br />End of line<br />
  68. 68. Why Custom Modules<br />Background processes<br />URL rewriting or routing<br />Identity persistence for custom providers (or any other kind of persistence)<br />Benchmarking<br />
  69. 69. Why Custom Handlers<br />Image watermarking<br />Dynamic image generation<br />RSS output generation<br />File denial or protection<br />
  70. 70. Tips & Tricks<br />Use your own base page to house common functionality.<br />If overriding On{event} methods, remember that the event-wire-up methods in code-behind fire when you call base On{event}.<br />Example: override OnLoad in a base class, Page_Load in code-behind gets called when you call base.OnLoad.<br />Use <page pageBaseType= demo<br />Register your server controls in your Web.Config file.<br />Eliminates repeat registrations in ASPX & ASCX files.<br />Eliminates registrations in Skin files.<br />End of line<br />
  71. 71. Tips & Tricks<br />Remove HTTP Modules that you don’t need<br />If file protection necessary, add file extension (ZIP) to registered extensions in IIS.<br />Bring them into the pipeline for protection and controlled exposure.<br />Presentation available on my site.<br />End of line<br />
  72. 72. Tips & Tricks<br />Turn ViewState off in controls that don’t need them – especially grids.<br />In 4.0 the model can be reversed.<br />More compact in 4.0.<br />Override LoadPageStateFromPersistenceMedium & SavePageStateToPersistenceMedium to alter where and how ViewState is saved.<br />
  73. 73. Tips & Tricks<br />Deployment Mode<br />In <system.web><br /><deployment retail=“true” /><br />Turns debugging, tracing, and detailed errors OFF<br />Machine.Config ONLY<br />Way Advanced<br />PageParserFilter abstract base class<br />Lets you govern the behavior of the ASP.NET Page Parser<br />
  74. 74. Agenda<br />Defining ASP.NET<br />Terms & Buzzwords<br />A Request-to-Response Walkthrough<br />Additional Technologies<br />Summary<br />
  75. 75. What To Take Away From This<br />ASP.NET does much more than serve pages.<br />Decoupled architecture allows flexible hosting.<br />Pipeline and Event cycle – two different things.<br />Extensible architecture allows opportunities for interception and alteration.<br />Module and Handler model enforce encapsulation and reusability.<br />Be mindful of how much is happenning behind the scenes.<br />End of line<br />
  76. 76. References<br />Great Wikipedia entry<br />http://en.wikipedia.org/wiki/ASP+<br />Article: How ASP.NET Works<br />http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp<br />Code Magazine – Nov/Dec 2005<br />Rick Strahl<br />
  77. 77. References<br />Article: Truly Understanding ViewState<br />http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/truly-understanding-viewstate.aspx<br />Dave Reed<br />Understanding ASP.NET Internals<br />http://grokable.com/teched-2007-presentation-slides-and-demos/<br />Rob Howard<br />
  78. 78. Essential ASP.NET 2.0<br />Addison-Wesley<br />Fritz Onion & Keith Brown<br />My Site & Email:<br />www.dotnetdude.com <br />miguel.castro@idesign.net<br />

×