Ola pessoal, tudo bem? Ano novo começando, espero que tenham passado um excelente período de festas. Hoje, vamos retomar nossa série sobre Owin/Katana (vNext) só que desta vez vamos aprender como integrar um projeto Asp.Net com o host de aplicações web chamado: OwinHost, distribuido através do Nuget.
O desenvolvimento de projetos Asp.Net utilizando o host OwinHost.exe não muda em absolutamente nada do que vimos anteriormente aqui e aqui, além de continuarmos com a possibilidade de escolha entre projetos: Class Library ou Web. Ok! mas deve existir alguma diferença no desenvolvimento de alguma dessas opções, ou não? A resposta é SIM!
Class Library – Aqui você terá a configuração da sua aplicação mais simples e com referências (assemblies) do seu projeto usando o minimo necessário. Contudo, toda referência que for necessária ao seu projeto, precisa ser adicionada manualmente além de atachar manualmente o seu projeto ao processo do OwinHost para obter o recurso de Debbuging, não se preocupe Vamos mostrar mais a frente neste mesmo artigo . Outro "incomodo" é que você não terá acesso a todos os recursos das ferramentas web.
Web Application – Com essa opção, após criar o seu projeto você observará que várias referências serão adicionadas em excesso ao projeto web, te obrigado a remover uma a uma, deixando seu projeto utilizando apenas as referências necessárias. Utilizando esta opção, você será capaz de utilizar todos os recursos e ferramentas web.
Show me the code man! Sim, vamos utilizar a opção mais leve e menos comum ao cenário de desenvolvimento web: Class Library! Então, crie um projeto vazio do tipo Class Library e em seguida remova a classe Class1.cs. Agora chegou a hora de adicionarmos a classe que começa a fazer toda a diferença ao nosso projeto e será responsável pelas configurações importantes e inicialização da aplicação web: OWIN Startup! A figura abaixo mostra onde você pode localizar a opção:
Após adicionar a classe Startup.cs, você verá que o visual studio adicionou, via Nuget, automaticamente todas as referências necessárias para que essa classe consiga funcionar: Owin.dll e Microsoft.Owin.dll, e todas as outras referências são o minimo necessário para que seu projeto funcione. Clean Solution, não é fantástico não depender mais de referências desnecessárias e poder ter um projeto inicializando e funcionando de forma mais performática !?
Agora que temos a classe Startup configurada com o mímimo necessário para executarmos o primeiro start da aplicação, vamos adicionar ao projeto o host OwinHost.exe. Abra o Package Manager Console e digite o comando: Install-Package OwinHost. Após a execução, assim como todos os outros pacotes que são instalados via NuGet este não será diferente, ou seja, você encontrará sua instalação na pasta ..\packages\OwinHost.3.0.1 e as ferramentas dentro da pasta ..\packages\OwinHost.3.0.1\tools.
Por convenção o aplicativo OwinHost.exe quando executado sem parâmetros carreta os assemblies diretamente da pasta .\bin relativa raiz do seu projeto, e apartir dessa chamada o host irá procurar pelo assembly que contenha o atribuito OwinStartup ou configuração no arquivo de configuração web.config ou app.config, o nosso caso. Como estamos desenvolvendo uma Class Library, por padrão o Visual Studio realiza o output dos assemblies no diretório .\bin\debug, precisamos alterar a configuração do Output Path conforme imagem abaixo:
Agora vamos se nossa aplicação está funcionando conforme nossa configuração. Abra o prompt de comando (no meu caso eu estou usando o cmder) e vá para a pasta da sua aplicação e informe o path do OwinHost.exe, conforme imagem abaixo:
Pronto! A aplicação está funcionando perfeitamente. Agora é só abrir o browser de sua preferência e informar a url: https://localhost:5000:
Por padrão, como não foi informada nenhuma configuração de porta para o serviço OwinHost, o mecanismo inicializa o projeto na porta padrão 5000. Mas poderiamos também realizar essa alteração executando o aplicativo OwinHost.exe –p 9000, por exemplo, e teriamos a aplicação executando em uma porta diferente da porta padrão. Duvida? Tente você mesmo executar o host do owin com uma porta diferente e teste . Outros parâmetros podem ser utilizados para configurar o OwinHost, basta que você informe /? que o console de comando listará todos os comandos que podem ser configurados.
Caso você queira debugar sua aplicação em modo Class Library, você precisa realizar um procedimento um tanto incomum, mas que pode resolver o seu problema: Attach Process! Isso mesmo, atachar o processo do OwinHost ao seu projeto, conforme a imagem abaixo:
Agora é só adicionar um breakpoint no código do método Configuration que seu projeto está apto para debug.
Bom agora que você entende um pouco mais sobre aplicações OWIN, sabe que toda aplicação desse tipo precisa ter uma classe de inicialização, ou seja, uma classe **Startup. **
Naming Convention (Convensão por Nome) – Utilizando esta opção, basta que você adicione na raíz do seu projeto uma classe com o nome Startup
OwinStartup – Utilizando essa classe de atributo a nível de informações do assembly, podemos informar um nome mais amigável para a classe de bootstrap (inicialização) Startup
Startup Option – Essa opção será utilizada em caso de sua aplicação ser do tipo CustomHost (em modo Console, por exemplo)
Vamos agora criar algumas classes de bootstratp e mostrar como podemos inicializar nossa aplicação com várias versões diferentes de inicialização.
                    return context.Response.WriteAsync("Vamos começar a desenvolver o nosso projeto? :D");
                return context.Response.WriteAsync("Ok, agora estou pronto para receber uma bateria de testes ");
Para ter acesso ao Middleware .UseWelcomePage(), é necessário instalar um novo pacote do Owin. Para isso, informe o comando abaixo no console Package Manager Console (PMC):
Para testarmos a aplicação acima, abra o cmder/cmd e navegue até raíz da pasta do seu projeto, conforme a imagem abaixo:
Abaixo segue imagens com o resultado do servidor OwinHost executando 3 instâncias independentes, uma para cada ambiente:
No artigo de hoje tentei passar um pouco da idéia da construção do zero de uma aplicação Katana (vNext) utilizando Class Library. Essa solução pode ser utilizada como solução em micro-serviços, por exemplo, pois seu pipeline de inicialização e execução é extremamente leve e flexivel para configurar várias portas e ambientes de execução por meio de nomes amigáveis das classes Startup. Apresentei como é possível termos várias classes de bootstrap no mesmo projeto e como podemos configurar o servidor OwinHost para utilizar de forma independente cada uma dessas classes.
Espero que tenham gostado. Aguardem o próximo artigo no qual abordarei como construir Middleware Customizados e registra-los no pipeline de uma aplicação Owin.
Olá pessoal, tudo bem? Hoje quero compartilhar com vocês a sensacional experiência que foi ter participado e palestrado de um dos maiores congressos de desenvolvedores de Software do Mundo, QCon SP 2016. Ao