Compartilhar via


Visão Geral sobre Módulos HTTP e Manipuladores HTTP

Um manipulador HTTP ASP.NET é o processo (frequentemente conhecido como "ponto-final") que funciona em resposta ao pedido feito a um aplicativo Web ASP.NET.O manipulador mais comum é um manipulador de página ASP.NET que processa arquivos .aspx.Quando os usuários solicitam um arquivo .aspx, a solicitação é processada pela página por meio do manipulador de página.Você pode criar seus próprios manipuladores HTTP que processam saída personalizada para o navegador.

Um módulo HTTP é um módulo que é chamado em todas as solicitações que são feitas em seu aplicativo.Módulos HTTP são chamados como parte do canal de requisição ASP.NET e têm acesso a eventos do ciclo de vida ao longo de toda a solicitação.Módulos HTTP permitem que você examine solicitações de entrada e saída e a ação se baseia na solicitação.

Esse tópico contém:

  • Cenários

  • Manipuladores HTTP e Módulos de Recursos HTTP

  • Segundo plano

  • Exemplos de código

  • Referência de Classe

Cenários

Usos típicos para manipuladores HTTP personalizados incluem o seguinte:

  • Feeds RSS para criar uma alimentação RSS para um site, você pode criar um manipulador que emite RSS formatado em XML.Você pode associar uma extensão como .rss para o manipulador personalizado.Quando os usuários enviam uma solicitação para seu site que termina em .rss, o ASP.NET chama o manipulador para processar a solicitação.

  • Servidor de Imagem Se você quiser que seu aplicativo da Web forneça imagens em uma variedade de tamanhos, você pode gravar um manipulador personalizado para redimensionar imagens e depois enviá-las de volta para o usuário como resposta do manipulador.

Usos típicos dos módulos HTTP incluem o seguinte:

  • Segurança   Como você pode examinar as solicitações que chegam, um módulo HTTP pode executar autenticação personalizada ou outras verificações de segurança antes da página solicitada, XML Web Services, ou manipulador ser chamado.Em Serviços de Informações da Internet (IIS) 7.0 executando no modo integrado, você pode estender a autenticação de formulários para todos os tipos de conteúdo em um aplicativo.

  • Estatísticas e Log    Como módulos HTTP são chamados em cada solicitação, você pode reunir estatísticas de solicitação e informações de log em um módulo centralizado, em vez de em páginas individuais.

  • Cabeçalhos ou Rodapés Personalizados   Como você pode modificar a resposta de saída, você pode inserir conteúdo, como informações de cabeçalho personalizadas para cada página ou resposta XML Web Services.

Voltar ao topo

Recursos

Manipulador HTTP e recursos do módulo incluem o seguinte:

  • As interfaces IHttpHandler e IHttpModule são o ponto de partida para desenvolver manipuladores e módulos.

  • A interface IHttpAsyncHandler é o ponto inicial para desenvolvimento de manipuladores assíncronos.

  • Código-fonte manipulador e módulo personalizado podem ser colocados na pasta App_Code de um aplicativo, ou podem ser compilados e colocados na pasta Bin de um aplicativo.

  • Manipuladores e módulos desenvolvidos para uso no IIS 6.0 podem ser usados em IIS 7.0 com pouca ou nenhuma alteração.Para obter mais informações, consulte Movendo um aplicativo ASP.NET do IIS 6.0 para o IIS 7.0.

  • Módulos podem se inscrever para uma variedade de notificações de solicitação de pipeline.Módulos podem receber a notificação de eventos do objeto HttpApplication.

  • Em IIS 7.0, o pedido de pipeline está integrado com o pipeline de solicitação do servidor Web.Módulos HTTP podem ser usados para qualquer solicitação para o servidor Web, não apenas as solicitações do ASP.NET.

Voltar ao topo

Segundo plano

Manipuladores HTTP

Um manipulador HTTP ASP.NET é o processo que é executado em resposta ao pedido que é feito a um aplicativo Web ASP.NET.O manipulador mais comum é um manipulador de página ASP.NET que processa arquivos .aspx.Quando os usuários solicitam um arquivo .aspx, a solicitação é processada pelo manipulador da página.

O manipulador de página ASP.NET é apenas um tipo de manipulador.ASP.NET inclui vários outros manipuladores internos, como o manipulador de serviço da Web para arquivos .asmx.

Construindo manipuladores HTTP no ASP.NET

ASP.NET mapeia solicitações HTTP para manipuladores HTTP com base em uma extensão de nome de arquivo.Cada manipulador HTTP pode processar URLs HTTP individuais ou grupos de extensões URL em um aplicativo.ASP.NET inclui vários manipuladores HTTP internos, como listados na tabela a seguir.

Manipulador

Descrição

Manipulador de página ASP.NET (*.aspx)

O manipulador HTTP padrão para todas as páginas ASP.NET.

Manipulador do serviço da Web (*.asmx)

O manipulador HTTP padrão para páginas de serviços Web criadas como arquivos .asmx no ASP.NET.

Manipulador Web genérico (*.ashx)

O manipulador HTTP padrão para todos os manipuladores da Web que não têm um interface do usuário e que inclui a diretiva @ WebHandler.

Manipulador de rastreamento (Trace.axd)

Um manipulador que exibe informações de rastreamento da página atual.Para obter detalhes, consulte:Como: Modo de exibição ASP.NET Trace Information with the Trace Viewer.

Criar um manipulador HTTP personalizado

Para criar um manipulador HTTP personalizado, crie uma classe que implementa a interface IHttpHandler para criar um manipulador síncrono.Como alternativa, você pode implementar IHttpAsyncHandler para criar um manipulador assíncrono.As duas interfaces do manipulador exigem que você implemente a propriedade IsReusable e o método ProcessRequest.A propriedade IsReusable especifica se o objeto IHttpHandlerFactory (o objeto que realmente chama o manipulador adequado) pode colocar o identificador em um pool e reutilizá-lo para aumentar o desempenho.Se o manipulador não pode ser colocado em pool, a fábrica deve criar uma nova instância do manipulador a cada vez que o manipulador for necessária.

O método ProcessRequest é responsável pelo processamento de solicitações HTTP individuais.Nesse método, você escreve o código que produz a saída para o manipulador.

Manipuladores HTTP têm acesso ao contexto do aplicativo.Isso inclui a identidade do usuário solicitante (se conhecida), o estado do aplicativo e informações da sessão.Quando um manipulador HTTP é solicitado, o ASP.NET chama o método ProcessRequest do manipulador adequado.O código que você escreve no manipulador do método ProcessRequest cria uma resposta, que é enviada de volta para o navegador solicitante.

Mapeando a Extensão de um Nome de Arquivo

Quando você cria um arquivo de classe sistema autônomo seu manipulador HTTP, o manipulador pode responder a qualquer extensão de nome de arquivo não estiver já mapeada no IIS e no ASP.NET.Por exemplo, se você estiver criando um manipulador HTTP para gerar um feed RSS, você pode mapear o manipulador para a extensão de nome de arquivo .RSS.Em ordem para o ASP.NET sabe qual manipulador a ser usado para sua extensão de nome de arquivo personalizado, no IIS é necessário MAP a extensão para ASP.NET.Em seguida, no aplicativo, mapeie a extensão para o manipulador personalizado.

Por padrão, o ASP.NET mapeia a extensão de nome de arquivo .ashx para um manipulador HTTP.Se você adicionar a diretiva @ WebHandler a um arquivo de classe, o ASP.NET mapeia automaticamente a extensão de nome de arquivo .ashx para o manipulador HTTP padrão.Isso é semelhante à forma como o ASP.NET mapeia a extensão de nome de arquivo .aspx para o manipulador de página ASP.NET quando a diretiva @ Page é usada.Portanto, se você criar uma classe manipuladora HTTP que possui a extensão .ashx, o manipulador é automaticamente registrado com o IIS e ASP.NET.

Se você desejar criar uma extensão de nome de arquivo personalizadas para um manipulador, você deve registrar a extensão explicitamente com IIS e ASP.NET.A vantagem de não usar a extensão de nome de arquivo .ashx é que o manipulador depois é reutilizável para mapeamentos de extensão diferente.Por exemplo, em um aplicativo o manipulador personalizado pode responder às solicitações que terminam em .rss.Em outro aplicativo, ele pode responder às solicitações que terminam em .feed.Como outro exemplo, o manipulador pode ser mapeado para ambas as extensões de nome de arquivo no mesmo aplicativo, mas pode criar respostas diferentes com base na extensão.

O processo para registrar um manipulador de extensão de nome de arquivo personalizado é diferente no IIS 7.0 e em versões anteriores do IIS.Para obter mais informações, consulte Como: Registrar manipuladores HTTP e Como: Configurar uma extensão de manipulador HTTP no IIS.

Manipuladores HTTP Síncrono e Assíncrono

Um manipulador HTTP pode ser síncrono ou assíncrono.Um manipulador síncrono não retorna até terminar de processar a solicitação HTTP para o qual ele é chamado.Um manipulador assíncrono executa um processo independentemente de enviar uma resposta para o usuário.Manipuladores assíncronos são úteis quando você precisa iniciar um processo do aplicativo que pode ser demorado e o usuário não precisará esperar até que ele terminar antes de obter uma resposta do servidor.

Manipuladores HTTP assíncronos permitem que você inicie um processo externo, como um chamada de método a um servidor remoto.O manipulador pode, então, continuar processando sem esperar que o processo externo conclua.Enquanto um manipulador HTTP assíncrono é processado, ASP.NET coloca o segmento que normalmente deve ser usado para o processo externo de volta para o pool de segmento até o manipulador receber um retorno de chamada do processo externo.Isso pode prevenir que o segmento bloqueie e pode melhorar bastante o desempenho, porque somente um número limitado de segmentos pode executar simultaneamente.Se um grande número de usuários solicitar manipuladores HTTP síncronos que dependam dos processos externos, o sistema operacional pode executar fora de segmentos, pois muitos segmentos são bloqueados e ficam em espera por um processo externo.

Quando você cria um manipulador assíncrono, você deve implementar a interface IHttpAsyncHandler.Você também deve implementar o método BeginProcessRequest para iniciar uma chamada assíncrona que processa solicitações HTTP individuais.Além disso, você deve implementar o método EndProcessRequest para executar a limpeza código quando o processo termina.

Classes IHttpHandlerFactory personalizadas

A classe IHttpHandlerFactory recebe solicitações e é responsável por encaminhar uma solicitação para o manipulador HTTP apropriado.Você pode criar uma fábrica de manipuladores HTTP personalizada, criando uma classe que implementa a interface IHttpHandlerFactory.Uma fábrica de manipulador personalizado pode exercer um melhor controle sobre como as solicitações HTTP são processadas criando diferentes manipuladores com base em condições de tempo de execução.Por exemplo, com uma fábrica de manipuladores HTTP personalizada, você pode criar uma instância de um manipulador HTTP de uma tipo de arquivo se o método de solicitação HTTP é PUT, e outro se for o método GET.

Para registrar uma extensão personalizada para uma fábrica de manipulador, execute as etapas para registrar uma extensão personalizada para um manipulador.Para obter um exemplo de criação e registro de uma fábrica de manipuladores, consulte Demonstra Passo a passo: Criando e registrando o manipulador HTTP fábricas.

Módulos HTTP

Um módulo HTTP é um módulo que é chamado em todas as solicitações que são feitas em seu aplicativo.Módulos HTTP são chamados como parte do canal de solicitação e têm acesso a eventos de ciclo de vida em toda a solicitação.Módulos HTTP permitem, então, que você examine solicitações de entrada e a ação se baseia na solicitação.Eles também permitem que você examine a resposta de saída e a modifique.

No IIS 6.0, o canal de solicitação do ASP.NET é separado do canal de solicitação do servidor Web.Em IIS 7.0, o canal de solicitação do ASP.NET e o canal de solicitação do servidor Web podem ser integrados em um canal de solicitações comuns.Em IIS 7.0, isso é conhecido como modo Integrado.O canal unificado tem várias vantagens para os desenvolvedores de ASP.NET.Por exemplo, ele permite módulos de código gerenciado receberem notificações de canal para todas as solicitações, mesmo se as solicitações não forem para recursos do ASP.NET.No entanto, se desejar, você pode executar IIS 7.0 no modo Clássico, que emula o ASP.NET em execução no IIS 6.0.Para obter mais informações, consulte Uma visão geral do Ciclo de Vida do Aplicativo ASP.NET para o IIS 7.0.

Módulos HTTP ASP.NET são como os filtros ISAPI porque eles são chamados por todas as solicitações.No entanto, eles são escritos em código gerenciado e são totalmente integrados com o ciclo de vida de um aplicativo ASP.NET.Você pode colocar código-fonte de módulo personalizado na pasta App_Code do aplicativo, ou você pode colocar módulos personalizados compilados como conjuntos de módulos (assemblies) na pasta Bin de um aplicativo.

O ASP.NET usa módulos para implementar vários recursos do aplicativo, que inclui serviços de autenticação de formulários, cache, estado de sessão e script de cliente.Em cada caso, quando esses serviços estão ativados, o módulo é chamado como parte de uma solicitação e executa tarefas que estão fora do escopo de qualquer solicitação única página.Os módulos podem consumir os eventos de aplicativo e podem chamar eventos que podem ser tratados no arquivo Global.asax.Para obter mais informações sobre eventos regulares, consulte Ciclo de Vida do Aplicativo ASP.NET uma visão geral para o IIS 5.0 e 6.0 e Uma visão geral do Ciclo de Vida do Aplicativo ASP.NET para o IIS 7.0.

Observação:

Módulos HTTP diferem dos manipuladores HTTP.Um manipulador HTTP retorna uma resposta a uma solicitação que é identificada por um extensão de nome de arquivo ou da família de extensões de nome de arquivo.Por outro lado, um módulo HTTP é invocado por todas as solicitações e respostas.Ele assina para notificações de evento no canal de pedido e permite que você executar o código nos manipuladores de eventos registrados.As tarefas para que um módulo é usado são gerais para um aplicativo e para todas as solicitações para recursos no aplicativo.

Como funcionam módulos HTTP

Módulos devem ser registrados para receber notificações do canal de pedido.A maneira mais comum para registrar um módulo HTTP é no arquivo web.config do aplicativo.Em IIS 7.0, o canal de solicitação unificada também permite que você registre um módulo de outras maneiras, que incluem a Gerenciador do IIS e através de ferramenta de linha de comando Appcmd.exe.Para obter mais informações, consulte Configurando mapeamentos de manipulador no IIS 7.0 and Inicie o Appcmd.exe.

Quando ASP.NET cria uma instância da classe HttpApplication que representa seu aplicativo, instâncias de qualquer módulo que foram registradas são criadas.Quando um módulo é criado, o método Init é chamado e o módulo inicializa a si próprio.Para obter mais informações, consulte Ciclo de Vida do Aplicativo ASP.NET uma visão geral para o IIS 5.0 e 6.0 e ASP.NET Uma visão geral do Ciclo de Vida do Aplicativo ASP.NET para o IIS 7.0.

Em um módulo do método Init, você pode assinar vários eventos do aplicativo, como BeginRequest ou EndRequest vinculando os eventos aos métodos no módulo.

Observação:

Para módulos que operam no canal integrado de IIS 7.0, você deve registrar manipuladores de eventos no método Init.

Quando os eventos de aplicativo são gerados, o método apropriado no seu módulo é chamado.O método pode executar qualquer lógica necessária, como verificação de autenticação ou registro de informações de solicitação.Durante manipulação de eventos, o módulo tem acesso à propriedade Context da solicitação atual.Isso permite que você redirecione a solicitação para uma página alternativa, modifique a solicitação, ou execute qualquer outra manipulação de solicitação.Por exemplo, se o módulo verifica autenticação, o módulo pode redirecionar para uma página de login ou erro se as credenciais não estiverem corretas.Caso contrário, quando o módulo do manipulador de eventos tiver terminado a execução, o ASP.NET chama o próximo processo no canal.Esse pode ser outro módulo ou pode ser o manipulador HTTP apropriado (como um arquivo .aspx) para a solicitação.

Módulos HTTP versus arquivos Global.asax

Você pode implementar grande parte da funcionalidade de um módulo no arquivo Global.asax do aplicativo que permite que você responda a eventos do aplicativo.Entretanto, módulos têm uma vantagem em relação ao arquivo Global.asax, pois eles são encapsulados e podem ser criados uma vez e usados em vários aplicativos diferentes.Adicionando-os ao conjunto de módulos de cache global e registrando-os no arquivo Machine.config, você pode reutilizá-los entre aplicativos.Para obter mais informações, consulte Cache global de assemblies.

Observação:

No IIS 7.0, o canal integrado permite que módulos gerenciados assinem notificações de canal para todas as solicitações, não apenas as solicitações para recursos do ASP.NET.Manipuladores de eventos no arquivo Global.asax são chamados apenas para notificações durante as solicitações para recursos do aplicativo.Módulos personalizados no modo integrado podem ser delimitados explicitamente para receber notificações de eventos apenas para as solicitações para o aplicativo.Caso contrário, módulos personalizados recebem notificação de evento para todas as solicitações para o aplicativo.Se o atributo precondition do elemento add da seção modules é definido para "managedHandler", o módulo é delimitado para o aplicativo.

A vantagem de usar o arquivo Global.asax é que você pode manipular outros eventos registrados, como Session_Start e Session_End.Além disso, o arquivo Global.asax habilita você a instanciar objetos globais que estão disponíveis em todo o aplicativo.

Você deve utilizar um módulo sempre que você tiver que criar o código que depende de eventos do aplicativo, e quando as seguintes condições forem verdadeiras:

  • Você deseja reutilizar o módulo em outros aplicativos.

  • Você deseja evitar a colocação de código complexo no arquivo Global.asax.

  • O módulo se aplica a todas as solicitações no canal (IIS 7.0 apenas modo integrado).

Você deve adicionar o código no arquivo Global.asax sempre que você tiver que criar o código que depende dos eventos de aplicativo e você não precisar reutilizá-lo para todos os aplicativos.Você também pode usar o arquivo Global.asax quando você tiver que se inscrever a eventos que não estão disponíveis para módulos, como Session_Start.

Criando um módulo HTTP

O processo geral para escrever um módulo HTTP é o seguinte:

Para obter informações adicionais sobre como mover um módulo de um aplicativo que está sendo executado no IIS 6.0 ou versões anteriores para um aplicativo executado na IIS 7.0, consulte Movendo um aplicativo ASP.NET do IIS 6.0 para o IIS 7.0.

Voltar ao topo

Exemplos de código

QuickStarts

Manipuladores HTTP e Fábricas

Tópicos Como Fazer e Passo a passo

Como: Registrar manipuladores HTTP

Como: Configurar uma extensão de manipulador HTTP no IIS

Passo-a-Passo: Criando um Manipulador HTTP Síncrono

Demonstra Passo a passo: Criar um manipulador HTTP assíncrono

Demonstra Passo a passo: Criando e registrando o manipulador HTTP fábricas

Passo-a-passo: Criando e Registrando um Módulo HTTP Personalizado

Voltar ao topo

Referência de Classe

A tabela a seguir lista as classes de servidores chave para os módulos HTTP e manipuladores HTTP.

Classe

Descrição

IHttpModule

Usado para criar um módulo HTTP personalizado implementando a interface e, em seguida, registrando o módulo no arquivo web.config.

IHttpHandler

Usado para criar um manipulador HTTP síncrono personalizado, criando uma classe que implementa a interface.

IHttpAsyncHandler

Usado para criar um manipulador HTTP assíncrono personalizado, criando uma classe que implementa a interface.

Voltar ao topo

Consulte também

Conceitos

Ciclo de Vida do Aplicativo ASP.NET uma visão geral para o IIS 5.0 e 6.0

Uma visão geral do Ciclo de Vida do Aplicativo ASP.NET para o IIS 7.0

Referência

Voltar ao topo