Se livre da dependência ao IIS, aprenda a criar aplicações Self-Host.

Quando vamos desenvolver uma aplicação web utilizando as tecnologias da Microsoft, já vem na cabeça “Vou precisar hospedar minha aplicação no IIS!” (Internet Information Services) seja ela um site web ou um simples serviço WCF ou WEBAPI.

selfhost_13Essa dependência passou a ser vista como um problema, com isso foi iniciado o projeto do padrão OWIN (Open Web Interface for .NET) onde seu objetivo era retirar essa associação entre aplicação e server, incentivar o desenvolvimento mais simples e fortalecer o desenvolvimento open-source.

Falo sobre esse padrão no meu artigo serie-webapi-parte1, sugiro a leitura para o entendimento das tecnologias envolvidas.

A ideia a partir deste projeto é que possamos hospedar nossas aplicações em uma outra aplicação host (uma Console Application ou um Windows Service) lógico ainda teremos que efetuar a instalação no server mas independente de um IIS.

Com isso você ganha a possibilidade de rodar sua aplicação sob seu próprio processo sem se preocupar com o desempenho de aplicações que estão no mesmo Pool de aplicativos e não travar como acontece muitas vezes quando ocorre sobrecarga no processo do IIS.

Neste tutorial vou mostrar como criar uma aplicação self-host básica e uma aplicação self-host com WebApi, o fonte está disponível no meu github.

Basicamente a aplicação está separada da seguinte maneira:            selfhost_12

Abra o Visual Studio 2015 e crie um projeto do tipo Console Application:

selfhost_1

Vamos instalar o pacote do Owin pelo Package Manager Console utilizando o seguinte comando:
Install-Package Microsoft.Owin.SelfHost

Agora crie na raiz do projeto uma classe chamada Startup.cs e dentro dela adicione o seguinte código:

selfhost_8

Agora vamos alterar a classe Program e transformar o console application em um server local, para isso vamos utilizar a classe WebApp do pacote Microsoft.Owin.Hosting, seu código deve ficar assim:

selfhost_10

Agora com tudo configurado basta executar a aplicação, a  saída deverá ter o seguinte resultado:

selfhost_2

Vá ao seu browser de preferência e digite o endereço configurado na classe Program:

selfhost_3

Pronto sua primeira aplicação self-host está pronta, sem dependência ao IIS pronta para receber suas aplicações web.

Para mostrar na prática agora vamos criar uma WebApi  Self Host.

Crie um outro projeto igual ao que criamos acima com as mesmas configurações, depois adicione a referencia ao pacote Microsoft.AspNet.WebApi.OwinSelfHost via nuget package manager:

selfhost_4

Vamos alterar agora a classe Startup.cs para definir as rotas da aplicação:

selfhost_11

O próximo passo é criar um controller, neste exemplo criei uma pasta Controller e dentro da pasta uma classe SelfHostController com dois métodos (não esqueça de herdar de ApiController):

selfhost_9

Feito esse processo basta rodar o projeto novamente e ir no browser e digitar o endereço configurado na classe Program: http://localhost:9999/api/SelfHost/  você deverá ver a lista de personagens dos desenhos animados na tela:

selfhost_5

Agora vamos buscar um personagem por id, digite no browser http://localhost:9999/api/SelfHost/3

selfhost_6

Pronto, simples assim aprendemos como criar uma aplicação self-host e ainda hospedar uma WebApi, é lógico isso é um exemplo bem simples do que pode ser feito.

Na prática acabamos de criar uma aplicação com um servidor embarcado o que pode ser bem bacana para pequenas aplicações dispensando a necessidade de ter que hospedar no IIS ou outro web server.

image019

Se ajudou comenta! qualquer comentário é de grande valor.

Um abraço e feliz 2018!!!!

Marcelo

3 Comments on “Se livre da dependência ao IIS, aprenda a criar aplicações Self-Host.”

  1. Ótimo artigo, ajudou muito, obrigado!
    Eu tenho uma questão sobre um Web Api Self-Host, quando utilizo Web Api com IIS consigo publicar facilmente utilizando os serviços do AWS Elastic beanStalk, Azure, smartasp… É possível fazer o mesmo com Web Api Self-Host? E em que situações vc recomendaria substituir o IIS?

Deixe uma resposta

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