C# - Usando a classe HttpListener


 Neste artigo vou apresentar a classe HttpListner e mostrar

A classe HttpListener do namespace System.Net, fornece um ouvinte de protocolo HTTP que pode ser controlado via código. Usando os recursos desta classe podemos criar um ouvinte de protocolo HTTP que responde a requisições HTTP. O ouvinte fica ativo durante toda a vida do objeto HttpListener sendo executado dentro da sua aplicação com suas permissões.

Para usar o HttpListener, crie uma nova instância da classe usando o construtor e use a propriedade Prefixes para obter acesso à coleção que trata as strings que especifica qual prefixos URI - Identificador de Recurso Uniforme o HttpListener deve processar.

Uma seqüência de prefixo URI é composta por um esquema (http ou https), um host, uma porta opcional e um caminho opcional. Um exemplo de uma seqüência de prefixo completa é "http://www.macoratti.net:8080/cliente/".

Os prefixos devem terminar em uma barra inclinada ("/"). O objeto HttpListener com o prefixo que mais se aproxima de uma URI solicitada responde à solicitação. Múltiplos objetos HttpListener não podem adicionar o mesmo prefixo; se isso ocorrer será lançada uma exceção System.ComponentModel.Win32Exception.

Quando uma porta é especificada, o elemento host pode ser substituído por "*" para indicar que o HttpListener aceita solicitações enviadas para a porta se o URI solicitado não corresponder a nenhum outro prefixo.

Por exemplo, para receber todos os pedidos enviados para a porta 8080 quando a URI solicitado não é tratada por qualquer 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 "+", "https: // +: 8080". Os caracteres "*" e "+" podem estar presentes em prefixos que incluem caminhos.

Recursos Usados:

Criando um HttpListner bem simples

Abra o VS 2017 Community e crie um projeto do tipo Console Application com o nome CSharp_Listener.

A seguir crie uma classe chamada ListenerDemo contendo um método estático Listner1 com o seguinte código :

using System;
using System.Net;
namespace CSharp_Listener
{
    public class ListenerDemo
    {
        public static void Listener1(string[] prefixes)
        {
            if (!HttpListener.IsSupported)
            {
                Console.WriteLine("Seu ambiente não suporta os recursos da classe HttpListener.");
                return;
            }
            // Os prefixos URI são obrigatórios
            // por exemplo "http://macoratti.net:8080/index/".
            if (prefixes == null || prefixes.Length == 0)
                throw new ArgumentException("prefixes");
            // Cria um listener.
            HttpListener listener = new HttpListener();
            // Adiciona os prefixos
            foreach (string s in prefixes)
            {
                listener.Prefixes.Add(s);
            }            
            //inicia o listener
            listener.Start();
            Console.WriteLine("Escutando...");
            // O método GetContext bloqueia enquanto aguarda pela requisição
            HttpListenerContext context = listener.GetContext();
            HttpListenerRequest request = context.Request;            
            // Obtém o objeto response
            HttpListenerResponse response = context.Response;            
            // Constrói uma resposta
            string responseString = "<HTML><BODY> Macoratti .Net - Quase tudo para .NET!</BODY></HTML>";
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);            
            // Obtem uma stream e escreve a resposta nela
            response.ContentLength64 = buffer.Length;
            System.IO.Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);            
            // fecha o stream
            output.Close();
            //para o listner
            listener.Stop();
        }
    }
}
   

O código acima já esta comentado e basicamente cria uma instância de HttpListener usando o prefixo informado e fica escutando para a seguir responder.

A seguir no método Main da classe Program inclua o código abaixo:

namespace CSharp_Listener
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] url = { "http://localhost:5324/" };
          ListenerDemo.Listener1(url);
        }
    }
}

Neste código estamos definindo um prefixo URI e passando para o método Listener1().

Executando projeto iremos obter o seguinte resultado:

1- O programa cria o Listener e fica escutando no endereço e porta indicados:

2- Abrindo um navegador e digitando o endereço: http://localhost:5324 teremos a resposta:

E até o próximo artigo.

Pegue o código do projeto aqui : CSharp_Listener.zip

"Portanto, agora nenhuma condenação há para os que estão em Cristo Jesus, que não andam segundo a carne, mas segundo o Espírito."
Romanos 8:1

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti