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:
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
Rafael,
Parabéns pelo post, aborda o assunto de maneira muito didática.
Ola Pedro,
Tento fazer o mais didático para que todos possam aprender
Abs e Obrigado pela vista.
Parabéns, ótimo post!
Olá Eduardo,
Muito obrigado,
abs.,