ASP.NET HTTP Pipeline

Click here to load reader

download ASP.NET HTTP  Pipeline

of 34

  • date post

    20-Jan-2016
  • Category

    Documents

  • view

    37
  • download

    0

Embed Size (px)

description

ASP.NET HTTP Pipeline. Programação na Internet Secção de Programação ISEL-DEETC-LEIC Luis Falcão - lfalcao@cc.isel.ipl.pt Carlos Guedes – cguedes@cc.isel.ipl.pt. Autores e contributos. Autores Luís Falcão Contributos Paulo Pereira Pedro Félix Jorge Martins Carlos Guedes - PowerPoint PPT Presentation

Transcript of ASP.NET HTTP Pipeline

PI

ASP.NET

HTTP PipelineProgramao na Internet Seco de ProgramaoISEL-DEETC-LEICLuis Falco - lfalcao@cc.isel.ipl.ptCarlos Guedes cguedes@cc.isel.ipl.pt 2007 - 2008ISEL/DEETC/SP Programao na Internet28-11-20101Carlos Guedes @ 2005 - ISEL/DEETC/SPTecnologias de InternetAutores e contributosAutoresLus FalcoContributosPaulo PereiraPedro FlixJorge MartinsCarlos GuedesNuno Datia2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet3\AgendaHTTP PipelinePontos de extensibilidadeHttpHandlerHttpApplicationHttpModuleGesto de estadoAspectos de implementao2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet34HTTP Pipeline Pontos de extensibilidadeCliente HTTPServidor HTTP hospedeiroASP.NET runtimeAppDomainAppDomainApp DomainHttpModule 2HttpModule 3Handler 2Handler 3HttpApplicationHttpModule 1Handler 12007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet45Custom HandlersPara definio de novos endpoints no atendimento de pedidos HTTPDefinidos com classes que implementam a interface IHttpHandler

Associao URL handler especificada via ficheiros de configuraoImplica a configurao do hospedeiro da infra-estrutura ASP.NET

So, em alternativa, definidos atravs de ficheiros *.ashxNo implica a configurao do hospedeiro (caso seja o IIS)public interface System.Web.IHttpHandler{void ProcessRequest(HttpContext context);bool IsReusable { get; }}2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet5CalcHandlerdemo2007 - 2008ISEL/DEETC/SP Programao na Internet6Demo: CalcHandlerusing System.Web;public class CalcHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { int a = int.Parse(context.Request["a"]); int b = int.Parse(context.Request["b"]); switch(context.Request ["op"]) { case "add": context.Response.Write(a + b); break; case "subtract": context.Response.Write(a - b); break; case "multiply": context.Response.Write(a * b); break; default: context.Response.Write("Unrecognized operation"); break; } } // ...}calcHandler.cs

web.configExemplo:http://localhost/site1/calculadora.calc?a=2&b=4&op=add2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na InternetDemo: Ficheiros *.ASHX

using System.Web;public class CalcHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { int a = int.Parse(context.Request["a"]); int b = int.Parse(context.Request["b"]); switch(context.Request ["op"]) { case "add": context.Response.Write(a + b); break; case "subtract": context.Response.Write(a - b); break; case "multiply": context.Response.Write(a * b); break; default: context.Response.Write("Unrecognized operation"); break; } } // ...}calculadora.ashxNOTA: No preciso configurar este handler no ficheiro de configurao da aplicao web.configExemplo:http://localhost/site1/calculadora.ashx?a=2&b=4&op=add2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na InternetDemo2EchoHandler

WaterMarkHandlerdemo2007 - 2008ISEL/DEETC/SP Programao na Internet910HttpHandler FactoryFbrica de instncias de HTTPHandlerMaior controlo sobre a criao e destruio das instncias dos handlers

utilizada quando definida no web.config, em vez do handlerpublic interface IHttpHandlerFactory { IHttpHandler GetHandler(HttpContext ctx, string requestType, string url, string translatedPath); void ReleaseHandler(IHttpHandler handler);}

Quando usam a factory devem remover esta linha.2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet1011HTTP Pipeline Pontos de extensibilidadeCliente HTTPServidor HTTP hospedeiroASP.NET runtimeApp DomainHttpApplicationHttpModule 1HttpModule 2HttpModule 3Handler 1Handler 2Handler 3AppDomainAppDomain2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet1112Custom HttpApplicationPara definio do primeiro n da cadeiaDefinido atravs do ficheiro Global.asax

A classe produzida deriva de System.Web.HttpApplicationOportunidade de captura de eventos globaisDe ciclo de vida (da aplicao)Incio, terminao ordeira, excepo no tratada, etc...De atendimento de pedido

void Application_Start(object sender, EventArgs e) { ... }void Application_End(object sender, EventArgs e) { ... }void Application_Error(object sender, EventArgs e) { ... }// Outros campos, propriedades ou mtodospublic override void Init() { ... }

2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet1213Atendimento de pedidoRecepo de pedidoAutenticao (durante e aps) e Autorizao (durante e aps)Verificao de existncia de resposta em cache (durante e aps)Resoluo URL handler (aps)Aquisio de estado de conversao (durante e aps)Execuo de handler para produo de resposta (antes e aps)Actualizao de estado de conversao (durante e aps)Actualizao da cache com resposta, caso se aplique (durante e aps)Fim de atendimento Envio de resposta para cliente (antes de cabealho e de contedo)sequncia de aces e eventos2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet1314Atendimento de pedido (2)BeginRequest

AuthenticateRequest

PostAuthenticateRequest

AuthorizeRequest

PostAuthorizeRequest

ResolveRequestCache

PostResolveRequestCache After the PostResolveRequestCache event and before the PostMapRequestHandler event, an event handler (a page corresponding to the request URL) is created.

PostMapRequestHandler

AcquireRequestState PostAcquireRequestState

PreRequestHandlerExecute The event handler is executed.

PostRequestHandlerExecute

ReleaseRequestState

PostReleaseRequestState After the PostReleaseRequestState event, response filters, if any, filter the output.

UpdateRequestCache

PostUpdateRequestCache

EndRequest Fonte: http://msdn2.microsoft.com/library/system.web.httpapplication.aspx2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet14Demo3Calcular o tempo de processamento de um pedido, em HttpApplicationdemo2007 - 2008ISEL/DEETC/SP Programao na Internet15Eventos implcitos de HttpApplicationA maioria dos eventos de aplicao ocorre em cada pedido, excepto Error e DisposedPara adicionar um handler de eventoRegistar delegate no eventoapp.OnEvent += new EventHandler(object src, EventArgs args)Definir mtodo com a assinatura void Application_event(object src, EventArgs args)Existem acontecimentos em HttpApplication que no so disponibilizados na forma de eventos da classe. Para adicionar handler:Definir mtodo cujos nomes correspondem a eventos, uma vez que estes so chamados por outras classes do pipelineEventReason for FiringApplication_StartApplication startingApplication_EndApplication endingSession_StartUser session beginsSession_EndUser session endsEventos de HTTPApplication:http://msdn2.microsoft.com/en-us/library/0dbhtdck.aspx2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na InternetOutros Membros de HttpApplicationpublic class HttpApplication : IHttpAsyncHandler, IComponent{ // Properties public HttpApplicationState Application {get;} public HttpContext Context {get;} public HttpModuleCollection Modules {get;} public HttpRequest Request {get;} public HttpResponse Response {get;} public HttpServerUtility Server {get;} public HttpSessionState Session {get;} public IPrincipal User {get;}

// Methods // Called after modules initialization public virtual void Init(); // To preemptively terminate the Request public void CompleteRequest(); // ...}2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet18HTTP Pipeline Pontos de extensibilidadeCliente HTTPServidor HTTP hospedeiroASP.NET runtimeApp DomainHttpApplicationHttpModule 1HttpModule 2HttpModule 3Handler 1Handler 2Handler 3AppDomainAppDomain2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet1819Custom Modules (1)Para definio de novos ns da cadeia de atendimento de pedidos HTTPDefinidos com classes que implementam a interface IHttpModule

Oportunidade paraCaptura de eventos globaisAtravs do registo na instncia de HttpApplicationPr processamento de pedidos e ps processamento de respostasCadeia especificada atravs de ficheiros de configuraopublic interface System.Web.IHttpModule{void Init(HttpApplication application);void Dispose();}2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet1920Custom Modules (2)A infra-estrutura ASP.NET utiliza mdulos para:AutenticaoAutorizaoCacheManuteno de estado de sesso out-of-processModulePurposeOutputCacheModulePage-level output cachingSessionStateModuleOut-of-process session state managementWindowsAuthenticationModuleClient authentication using integrated Windows authenticationFormsAuthenticationModuleClient authentication using cookie-based forms authenticationPassportAuthenticationModuleClient authentication using MS PassportUrlAuthorizationModuleClient authorization based on requested URLFileAuthorizationModuleClient authorization based on requested fileMdulos definidos pela plataforma ASP.NET2007 - 2008ISEL/DEETC/SP Programao na Internet2007 - 2008ISEL/DEETC/SP Programao na Internet20Construo de um Custom ModuleCriar tipo que implementa IHttpModuleInit() Registar delegates em eventos de HttpApplicationDispose() Realizar processamento de terminao do mdulo (caso exista)

Registar o mdulo no Web.configpublic interface IHttpModule{ // Chamado quando o mdulo criado. Recebe como parmetro uma