Desenvolvendo suas aplicações com Self Host

Para entender o Self Host é necessário entender o OWIN

Por muitos anos para se publicar as aplicações web desenvolvidas nas plataformas da Microsoft se utilizava o IIS (Internet Information Service) o mesmo passou por muitas modificações e melhorias no decorrer dos anos, se tornando uma ferramenta muito conhecida no mercado e se tornando uma das melhores para publicação de serviços WEB.

O grande problema disso foi a dependência que com o passar do tempo teve para rodar aplicações Microsoft somente no IIS, hoje a maioria das aplicações em ASP.NET necessitam de um servidor com IIS para funcionar. Devido essa dependência em 2010 iniciou o projeto do padrão Owin.

Owin ou Open Web Interface for .NET teve inicio em 2012 e a conclusão da versão 1.0 em 2012, ele define uma interface padrão entre os servidores web .NET e aplicações web. O objetivo da interface Owin é dissociar servidor e aplicação, incentivar o desenvolvimento de módulos simples para o desenvolvimento .NET web, e por ser um padrão aberto, estimular o ecossistema open source de ferramentas de desenvolvimento web .NET.

O Owin foi inspirado no NodeJs, Rack e WSGI on Python, todos com um objetivo simples: Ser um servidor web leve e rápidos. Seu propósito é que você não fique vinculado ao sistema operacional (Disponível hoje no .NET Core), o que acontece com as aplicações ASP.NET que são dependentes da System.Web a qual é 100% dependente do IIS.

Projeto Katana

O Katana é uma implementação da Microsoft que é baseada nos padrões do Owin. Ele é um conjunto flexível de componentes para a construção e hospedagem de aplicações web baseadas em Owin.

O projeto é de código aberto, atualmente ele inclui suporte Owin para System.Web e System.Net.HttpListener.
Também está incluído um OwinHost.exe para a execução de servidores auto-hospedeiro (Self-Host) a partir da linha de comando.

O Self Host

Como foi visto podemos agora hospedar nossas aplicações em uma aplicação console (Console Application) ou em um Serviço Windows (Windows Service) utilizado o pipeline do Owin em uma estrutura muito leve. Com isso tem a vantagem de fazer uma aplicação com seu próprio servidor web.

No exemplo vamos implementar um Self Host básico, iniciamos criando um novo projeto do tipo Console Aplication.

Agora vamos executar o comando Install-Package Microsoft.Owin.SelfHost no Packge Manager Console. Ao executar ele vai instalar os seguintes pacotes:

• Microsoft.Owin.Host.HttpListener
• Owin
• Microsoft.Owi
• Microsoft.Owin.Diagnostics
• Microsoft.Owin.Hosting
• Microsoft.Owin.SelfHost

Pronto com os pacotes instalados agora vamos preparar nosso servidor local que vai rodar independente do IIS. Para isso vamos usar a classe WebApp do namespace Microsoft.Owin.Hosting, abaixo temos o código de configuração que vai ser implementado na classe Program do Console Application:

class Program
    {
        static void Main(string[] args)
        {
            using (WebApp.Start<Startup>("http://localhost:12345"))
            {
                Console.WriteLine("Servidor online!");

                Console.ReadLine();
            }
        }
    }

Podemos ver que no WebApp.Start temos uma referência para classe Startup, que ainda não existe, então vamos adicionar uma classe Startup.cs e vamos adicionar o seguinte código nela:

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {            
            app.UseErrorPage();
            
            app.UseWelcomePage("/");
        }
    }

Pronto, nosso servidor está pronto para ser executado, se a aplicação for executada temos o seguinte resultado:

 

Conclusão

Com isso podemos ver que não existe mais a dependência do IIS para rodar nossas aplicações, e que podemos disponibilizar uma aplicação sem necessidade de um Windows Server rodando o IIS. Lembrando ainda que o .NET Core utiliza o Owin em todo o seu projeto. Lembrando que aqui foi só um breve resumo do que é possível fazer com o Self Host.

Os fontes do exemplo estão no GitHub: https://github.com/tborgesvieira/SimpleSelfHost

No próximo artigo vamos ver como implementar um WebApi utilizando o Self Host.

Referências

http://owin.org/
http://katanaproject.codeplex.com/documentation
https://msdn.microsoft.com/en-us/magazine/dn451439.aspx
http://www.jrobertoaraujo.net/2015/12/08/owin-qual-seu-proposito/
http://www.jrobertoaraujo.net/2015/12/16/microsoft-katana-self-host/

Posted in .NET, Blog, C#, Owin and tagged , , , , .

2 Comments

  1. Amei essa explicação sobre o OWIN.
    A microsoft fez mt bem em ter construído o projeto katana em cima do OWIN.
    É incrivel so pelo fato de podermos construir algo igual fazemos com o nodejs.
    Só construir e rodar sem depender do IIS, incrivel !!!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *