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/
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 !!!
Obrigado pelo comentário, realmente isso foi uma grande jogada, fora o .net core. Hoje uso muito esse recurso para pequenos jobs que tenho.