Self Hosting WebApi usando OWIN/Topshelf

28 dez

Fala Galera,

Hoje vamos falar sobre Self Hosting WebApi utilizando OWIN e Topshelf mas antes precisamos entender sobre o que é OWIN e o que é Topself.

O que é OWIN?

OWIN é uma abstração entre o .NET  e aplicação web. Ele desacopla a aplicação web do servidor web tornando ideal para se usar com SelfHost. OWIN pode ser usado para servir para diversos tipos de tecnologias como WebApi no qual iremos fazer a nossa demonstração, NancyFX e até como servidor FTP.

Suas vantagens são:

  • Hostear aplicação dentro do seu próprio processo independentemente do IIS, por exemplo: Windows Service
  • Facilidade de portar aplicação entre servidores e até sobre sistemas operacionais
  • Redução de componente middleware já que ele trabalha como um pipeline transparente

OWIN é um acrônimo de Open Web Interface e é uma serie de especificação feita pela comunidade web. O projeto Katana é a implementação da Microsoft para o OWIN.

O que é Topshelf?

Topshelf  é um framework para hospedar serviços escrito em .NET. A ideia principal é facilitar a criação de serviços, sua depuração e sua instalação permitindo que o desenvolvedor se preocupe somente em criar um console aplication. Topshelf está pronto para uso e podendo ser instalado em produção.

Neste post estarei mostrando como criar Self Host Web Api utilizando TopShelf e OWIN.

Show me the code

Para nossa demonstração, vamos criar um projeto do tipo Console Application. Após a criação do projeto, devemos instalar os seguintes pacotes localizado no NuGet para isso abra o Package Manager Console e digite os comandos abaixo:

  • Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
  • Install-Package Topshelf

Agora vamos criar nossos WebApiController, para isso crie uma nova classe chamada HomeController e adicione o código conforme mostrado abaixo:

public class HomeController : ApiController
{
   [HttpGet]
   public IHttpActionResult Get()
   {
      return Json(new { Result = "Seja bem vindo Topshelf com OWIN" });
   }
}

Vamos criar a nosso Route Provider, ele será o gerenciador de rotas do nosso WebApi. Para isso crie uma nova classe chamada WebApiConfig e adicione o código abaixo:

public class WebApiConfig
{
    public static HttpConfiguration Register()
    {
        var config = new HttpConfiguration();

        config.Routes.MapHttpRoute("DefaultApi",             "api/{controller}/{id}", new { id = RouteParameter.Optional });
        return config;

    }
}

 

Por último devemos registrar nossa aplicação utilizando o OWIN, para isso crie uma nova classe chamada OwinConfiguration e adicione o código abaixo:

public class OwinConfiguration
{
  public void Configuration(IAppBuilder app)
  {
     app.UseWebApi(WebApiConfig.Register());
  }
}

 

Configurando o TopShelf com OWIN

Com o nosso projeto configurado precisamos criar nosso servidor OWIN que irá hospedar nossa API, o TopShelf que será o responsável por gerenciar o OWIN.

Crie uma nova classe chamada HostingConfiguration e adicione o código abaixo:

public class HostingConfiguration: ServiceControl
{
     private IDisposable _webApplication;

     public bool Start(HostControl hostControl)
     { 
        Console.WriteLine("Iniciando o serviço");
        _webApplication = WebApp.Start<OwinConfiguration>("http://localhost:8089");
        Console.WriteLine("Serviço Iniciado");
        return true;
    }

    public bool Stop(HostControl hostControl)
    {
       Console.WriteLine("Terminando o serviço");
        _webApplication.Dispose();
        Console.WriteLine("Serviço terminado");
        return true;
    }

}

Como podemos ver no código acima escolhi a porta 8089, sinta-se a vontade para escolher outra porém em produção lembre-se de configurar o Firewall para aceitar requisições na porta escolhida.

Agora vamos abrir o program.cs e alterar o método principal conforme código abaixo:

static void Main(string[] args)
{
    HostFactory.Run(x =>
    {
        x.Service<HostingConfiguration>();
        x.RunAsLocalSystem();
        x.SetDescription("Owin with Webapi as Windows service");
        x.SetDisplayName("selfhost.owin.webapi");
        x.SetServiceName("selfhost.owin.webapi");
    });
    
}

 

Testando a aplicação

Com nossa aplicação configurada, execute a aplicação para testar as requisições, eu escolhi usar o postman porém podemos utilizar um navegador também.

Se tudo der certo devemos ver as seguintes imagens:

topshelf1

topshelf3

Como podemos ver, nossa aplicação funcionou conforme o esperado e o nosso serviço levantou com sucesso.

Para saber mais sobre o TopShelf clique aqui

Para saber mais sobre o OWIN clique aqui

O código deste exemplo está em meu GitHub através deste link

Abs e até a próxima

4 Replies to “Self Hosting WebApi usando OWIN/Topshelf

Deixe uma resposta

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