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