Microsoft ASP.NET 2.0/3.0 (advanced)
Michal Altair Valášek ASP.NET MVP Chief Software Architect | Altairis Corporation www.altairis.cz |
[email protected]
Request processing pipeline
Michal Altair Valášek ASP.NET MVP Chief Software Architect | Altairis Corporation www.altairis.cz |
[email protected]
Virtual Web
ISAPI
ISAPI
ISAPI
Virtual Web
ISAPI
ISAPI
ISAPI
HTTP požadavek
Copyright © Altairis LLC. 2006
ISAPI
Virtual Web
ISAPI
File system ISAPI
HTTP.SYS
Request execution pipeline (IIS)
Zpracování požadavků v IIS Veškerá rozšíření jsou v podobě ISAPI filtrů
MS: ASP 3.0 MS: ASP.NET 1.0, 1.1, 2.0 MS: SHTML, IDC... 3P: PHP, JSP, ColdFusion
Mapování podle nastavení metabáze Podle přípon Wildcard application maps
Copyright © Altairis LLC. 2006
Nastavení IIS a Wildcard application mapping
demo
Request execution pipeline (ASP.NET)
IHttpHandler
IHttpModule
IHttpModule
Web.config
Machine.config
IHttpHandler
IHttpHandler ASP.NET ISAPI IHttpHandler
IHttpHandler HTTP požadavek Copyright © Altairis LLC. 2006
File system
Životní příběh jednoho požadavku (..but this is the simplified version for general public!)
1. 2. 3. 4. 5. 6. 7. 8. 9.
Událost BeginRequest Autentizace Autorizace Načíst z cache (je-li co) Načíst request state Zavolat odpovídající HTTP handler Uložit request state Uložit do cache Událost EndRequest
Copyright © Altairis LLC. 2006
Životní příběh jednoho požadavku (1/2) 1. Prověřit, zda požadavek neobsahuje nebezpečné znaky (ValidateRequest=true) 2. Provést URL mapování definované ve web.config 3. Spustit událost BeginRequest 4. Spustit událost AuthenticateRequest 5. Spustit událost PostAuthenticateRequest 6. Spustit událost AuthorizeRequest 7. Spustit událost PostAuthorizeRequest 8. Spustit událost ResolveRequestCache 9. Spustit událost PostResolveRequestCache 10. Vybrat (na základě přípony nebo nastavení ve web.config) třídu implementující IHttpHandler, která zpracuje požadavek 11. Spustit událost PostMapRequestHandler Copyright © Altairis LLC. 2006
Životní příběh jednoho požadavku (2/2) 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Spustit událost AcquireRequestState Spustit událost PostAcquireRequestState Spustit událost PreRequestHandlerExecute Zavolat metodu ProcessRequest vybraného HTTP handleru. Spustit událost PostRequestHandlerExecute Spustit událost ReleaseRequestState Spustit událost PostReleaseRequestState Vyfiltrovat výstup, pokud je definována vlastnost Filter Spustit událost UpdateRequestCache Spustit událost PostUpdateRequestCache Spustit událost EndRequest
Copyright © Altairis LLC. 2006
HTTP handler Třída implementující IHttpHandler Je zcela zodpovědný za vlastní vyřízení požadavku Koncepčně poněkud připomíná ASP/PHP Obvykle se používá k vracení dat, které nejsou HTML formuláři (obrázky, RSS apod.) Dvě možnosti volání: soubor *.ashx nastavení ve web.configu Copyright © Altairis LLC. 2006
Příklad č. 24 HTTP handler
hands-on
HTTP handler factory Třída implementující interface IHttpHandlerFactory Dynamicky určuje, která třída se použije jako handler daného požadavku Použití např. pro specifický URL rewriting
Copyright © Altairis LLC. 2006
Příklad č. 25 HTTP handler factory
hands-on
HTTP modul Třída implementující IHttpModule Použije se při každém požadavku Lze v něm vytvořit event handler pro události z request life cycle Obvyklé použití: Modifikace vstupu či výstupu URL rewriting (obecný) Autentizace, autorizace
Copyright © Altairis LLC. 2006
Příklad č. 26 HTTP moduly
hands-on
Komunikace částí pipeline Přímá práce s požadavkem a odpovědí: System.Web.HttpContext.Current.Request System.Web.HttpContext.Current.Response
Předávání generických parametrů po pipeline pomocí context items: System.Web.HttpContext.Current.Items[]
Copyright © Altairis LLC. 2006
URL rewriting Pomocí HTTP handler factory GetCompiledPageInstance()
Pomocí HTTP modulů RewritePath() Nutno přepsat ve stránce ještě jednou kvůli relativním odkazům
Copyright © Altairis LLC. 2006
Příklad č. 12 URL rewriting a lokalizace
hands-on
Příklady vestavěných handlerů a modulů HTTP Handlers trace.axd
System.Web.Handlers.TraceHandler
WebResource.axd
System.Web.Handlers.AssemblyResourceLoader
*.aspx
System.Web.UI.PageHandlerFactory
*.asmx
System.Web.Services.Protocols.WebServiceHandlerFactory
*.config
System.Web.HttpForbiddenHandler
HTTP Modules OutputCache
System.Web.Caching.OutputCacheModule
Session
System.Web.SessionState.SessionStateModule
WindowsAuthentication
System.Web.Security.WindowsAuthenticationModule
FormsAuthentication
System.Web.Security.FormsAuthenticationModule
PassportAuthentication
System.Web.Security.PassportAuthenticationModule
RoleManager
System.Web.Security.RoleManagerModule
UrlAuthorization
System.Web.Security.UrlAuthorizationModule
FileAuthorization
System.Web.Security.FileAuthorizationModule
Copyright © Altairis LLC. 2006
ASP.NET Web Forms Nejviditelnější část technologie ASP.NET Jeden z mnoha HTTP handlerů Stromová struktura ovládacích prvků (Controls) Postupné volání eventů ve stromu: Inicializace: „shora dolů“ Ostatní: „odspodu nahoru“
Copyright © Altairis LLC. 2006
Obrazy ze života ASPX stránky 1. Start (inicializace vlastností jako Request, Response, nastavení Themes a Master Pages)
2. Page initialization (vytvoření controls, aplikace témat)
3. Load (načtení vlastností z ViewState/ControlState)
4. Validation 5. Postback event handler 6. Rendering (vygenerování výsledného HTML kódu)
7. Unload Copyright © Altairis LLC. 2006
Metody a události ASPX stránky (1/2) 1. Constructor 2. Construct 3. TestDeviceFilter 4. AddParsedSubObject 5. DeterminePostBackMode 6. OnPreInit 7. LoadPersonalizationData 8. InitializeThemes 9. OnInit 10. ApplyControlSkin 11. ApplyPersonalization 12. OnInitComplete 13. LoadPageStateFromPersistenceMedium (postback) 14. LoadControlState (postback) 15. LoadViewState (postback) Copyright © Altairis LLC. 2006
Metody a události ASPX stránky (2/2) 16. ProcessPostData1 (postback) 17. OnPreLoad 18. OnLoad 19. ProcessPostData2 (postback) 20. RaiseChangedEvents (postback) 21. RaisePostBackEvent (postback) 22. OnLoadComplete 23. OnPreRender 24. OnPreRenderComplete 25. SavePersonalizationData 26. SaveControlState 27. SaveViewState 28. SavePageStateToPersistenceMedium 29. Render 30. OnUnload Copyright © Altairis LLC. 2006
Tvorba control tree Tři základní fáze: Init – vytvoření Load – načtení hodnot Render – vykreslení
Dva zdroje Hardcoded v ASPX Generované dynamicky Nutno vytvořit včas Nepřežijí postback
Copyright © Altairis LLC. 2006
Příklad č. 27 Dynamické generování controls
hands-on
Base class a HTTP moduly Změna chování celé aplikace Vlastní base class pro stránky Podědit od System.Web.UI.Page Nutno nastavit ve všech případech Složitější, ale má design time support
Použití HTTP modulu
PreRequestHandlerExecute Možno zapojit konfiguračně Nemá design time support Omezenější možnosti
Copyright © Altairis LLC. 2006
Příklad č. 11 Použití page base classes
hands-on