Compartilhar via


System.Net.HttpListener classe

Este artigo fornece observações complementares à documentação de referência para essa API.

Usando a classe, você pode criar um ouvinte de protocolo HTTP simples que responde a HttpListener solicitações HTTP. O ouvinte fica ativo durante o tempo de vida do HttpListener objeto e é executado em seu aplicativo com suas permissões.

Para usar HttpListenero , crie uma nova instância da classe usando o HttpListener construtor e use a Prefixes propriedade para obter acesso à coleção que contém as cadeias de caracteres que especificam quais prefixos URI (Uniform Resource Identifier) devem HttpListener processar.

Uma cadeia de caracteres de prefixo de URI é composta por um esquema (http ou https), um host, uma porta opcional e um caminho opcional. Um exemplo de uma cadeia de caracteres de prefixo completa é http://www.contoso.com:8080/customerData/. Os prefixos devem terminar em uma barra ("/"). O HttpListener objeto com o prefixo que mais se aproxima de um URI solicitado responde à solicitação. Vários HttpListener objetos não podem adicionar o mesmo prefixo, uma Win32Exception exceção é lançada se um adiciona um HttpListener prefixo que já está em uso.

Quando uma porta é especificada, o elemento host pode ser substituído por "*" para indicar que as HttpListener solicitações aceitas enviadas para a porta se o URI solicitado não corresponder a nenhum outro prefixo. Por exemplo, para receber todas as solicitações enviadas para a porta 8080 quando o URI solicitado não é manipulado por nenhum HttpListener, o prefixo é http://*:8080/. Da mesma forma, para especificar que o aceita todas as solicitações enviadas para uma porta, substitua o HttpListener elemento host pelo caractere "+". Por exemplo, https://+:8080. Os caracteres "*" e "+" podem estar presentes em prefixos que incluem caminhos.

Há suporte para subdomínios curinga em prefixos de URI gerenciados por um HttpListener objeto. Para especificar um subdomínio curinga, use o caractere "*" como parte do nome do host em um prefixo de URI. Por exemplo, http://*.foo.com/. Passe isso como o argumento para o Add método.

Aviso

Associações curinga de nível superior (http://*:8080/ e http://+:8080) não devem ser usadas. Associações de curinga de nível superior podem abrir o aplicativo para vulnerabilidades de segurança. Isso se aplica a curingas fortes e fracos. Use nomes de host explícitos em vez de curingas. Associações de curinga de subdomínio (por exemplo, *.mysub.com) não têm esse risco de segurança se você controlar o domínio pai completo (em vez de *.com, o qual é vulnerável). Veja rfc7230 section-5.4 para obter mais informações.

Para começar a escutar solicitações de clientes, adicione os prefixos de URI à coleção e chame o Start método. HttpListener oferece modelos síncronos e assíncronos para processar solicitações de clientes. As solicitações e suas respostas associadas são acessadas usando o HttpListenerContext objeto retornado pelo método ou suas contrapartes assíncronas GetContext , os BeginGetContext métodos e EndGetContext .

O modelo síncrono é apropriado se o aplicativo deve bloquear enquanto aguarda uma solicitação do cliente e se você deseja processar apenas uma solicitação por vez. Usando o modelo síncrono, chame o GetContext método, que aguarda que um cliente envie uma solicitação. O método retorna um HttpListenerContext objeto para processamento quando um ocorre.

No modelo assíncrono mais complexo, seu aplicativo não bloqueia enquanto aguarda solicitações e cada solicitação é processada em seu próprio thread de execução. Use o BeginGetContext método para especificar um método definido pelo aplicativo a ser chamado para cada solicitação de entrada. Dentro desse método, chame o EndGetContext método para obter a solicitação, processá-la e responder.

Em qualquer modelo, as solicitações de entrada são acessadas usando a HttpListenerContext.Request propriedade e são representadas por HttpListenerRequest objetos. Da mesma forma, as respostas são acessadas usando a HttpListenerContext.Response propriedade e são representadas por HttpListenerResponse objetos. Esses objetos compartilham alguma funcionalidade com os objetos e HttpWebResponse , mas os HttpWebRequest últimos objetos não podem ser usados em conjunto com HttpListener porque implementam comportamentos de cliente, não de servidor.

Um HttpListener pode exigir autenticação de cliente. Você pode especificar um esquema específico a ser usado para autenticação ou pode especificar um delegado que determine o esquema a ser usado. Você deve exigir alguma forma de autenticação para obter informações sobre a identidade do cliente. Para obter informações adicionais, consulte o User, AuthenticationSchemese AuthenticationSchemeSelectorDelegate propriedades.

Observação

Se você criar um usando https, deverá selecionar um HttpListener Certificado de Servidor para esse ouvinte. Caso contrário, as solicitações para isso HttpListener falharão com um fechamento inesperado da conexão.

Observação

Você pode configurar Certificados de Servidor e outras opções de ouvinte usando o Shell de Rede (netsh.exe). Consulte Shell de rede (Netsh) para obter mais detalhes. O executável começou a ser fornecido com o Windows Server 2008 e o Windows Vista.

Observação

Se você especificar vários esquemas de autenticação para o , o HttpListenerouvinte desafiará os clientes na seguinte ordem: Negotiate, , e, em seguidaBasic, NTLMDigest.

HTTP.sys

A HttpListener classe é criada sobre , que é o ouvinte do HTTP.sysmodo kernel que manipula todo o tráfego HTTP para Windows. HTTP.sys Fornece gerenciamento de conexão, limitação de largura de banda e log de servidor Web. Use a ferramenta HttpCfg.exe para adicionar certificados SSL.