Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece comentários complementares à documentação de referência para esta API.
Usando a HttpListener classe, você pode criar um ouvinte de protocolo HTTP simples que responde a solicitações HTTP. O ouvinte fica ativo durante o tempo de vida do objeto HttpListener e é executado dentro de sua aplicação com suas permissões.
Para usar HttpListener, crie uma nova instância da classe usando o construtor HttpListener e utilize a propriedade Prefixes para acessar a coleção que contém as cadeias de caracteres que especificam quais prefixos de URI (Identificador Uniforme de Recursos) o HttpListener deve 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 corresponde mais de perto a 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 HttpListener adicionar um prefixo que já está em uso.
Quando uma porta é especificada, o elemento host pode ser substituído por "*" para indicar que HttpListener aceita solicitações enviadas à porta se o URI solicitado não corresponder a nenhum outro prefixo. Por exemplo, para receber todas as solicitações enviadas à porta 8080 quando o URI solicitado não for tratado por nenhum HttpListener, o prefixo é http://*:8080/. Da mesma forma, para especificar que o HttpListener aceita todas as solicitações enviadas para uma porta, substitua o elemento host pelo caractere "+". Por exemplo, https://+:8080. Os caracteres "*" e "+" podem estar presentes em prefixos que incluem caminhos.
Subdomínios curinga têm suporte em prefixos de URI que são gerenciados por um objeto HttpListener. Para especificar um subdomínio curinga, use o caractere "*" como parte do nome de host em um prefixo de URI. Por exemplo, http://*.foo.com/. Passe isso como o argumento para o Add método.
Aviso
Associações de 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). Consulte a seção rfc7230-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 processamento de solicitações de cliente. As solicitações e suas respostas associadas são acessadas usando o objeto HttpListenerContext retornado pelo método GetContext ou pelos seus equivalentes assíncronos, os métodos BeginGetContext e EndGetContext.
O modelo síncrono é apropriado se o aplicativo deve ser bloqueado 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 um cliente enviar uma solicitação. O método retorna a você um objeto HttpListenerContext para processamento quando ocorre um.
No modelo assíncrono mais complexo, seu aplicativo não é bloqueado 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 um dos modelos, 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 algumas funcionalidades com os HttpWebRequest objetos e HttpWebResponse objetos, mas os últimos objetos não podem ser usados em conjunto com HttpListener porque implementam comportamentos de cliente, não de servidor.
Uma HttpListener pode exigir a autenticação do cliente. Você pode especificar um esquema específico a ser usado para autenticação ou especificar um delegado que determina 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 as propriedades User, AuthenticationSchemes e AuthenticationSchemeSelectorDelegate.
Observação
Se você criar um HttpListener usando https, será necessário selecionar um Certificado do Servidor para esse ouvinte. Caso contrário, as requisições a este HttpListener falharão com um encerramento 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 o Shell de Rede (Netsh) para obter mais detalhes. O executável começou a ser enviado com o Windows Server 2008 e o Windows Vista.
Observação
Se você especificar vários esquemas de autenticação para o HttpListener, o ouvinte desafiará os clientes na seguinte ordem: Negotiate, NTLM, Digest e depois Basic.
HTTP.sys
A classe HttpListener é criada sobre HTTP.sys, que é o ouvinte de modo kernel que manipula todo o tráfego HTTP para o 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.