Quando devo usar o OWIN Katana?

270

Eu sou novo em OWIN e Katana. Realmente não entendo por que devo usar o OWIN, enquanto posso usá-lo IIS. Para simplificar, minha pergunta é: O que eu perco se eu pular o aprendizado do OWIN e usar o IIS nos meus sites?

Pesquisei no Google, mas não há uma explicação simples. Há algumas informações aqui , mas elas usam algumas frases do jargão, então eu não consigo entender.

Seyed Morteza Mousavi
fonte
2
Eu me pergunto o quanto a direção OWIN é influenciada pela IoT. Não podemos realmente colar o IIS em um Arduino, podemos?
Sentinel

Respostas:

279

No asp.net WebApi v2, o pipeline OWIN se torna o padrão. Eventualmente, será o pipeline padrão em qualquer projeto asp.net.

Não posso colocá-lo melhor do que o que está escrito aqui: http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

A seção "A interface da Web aberta para .NET (OWIN)" explica perfeitamente os objetivos do OWIN.

Sem o OWIN, os bits do asp.net são acoplados à maneira como o IIS se comunica com o aplicativo. OWIN abstrai servidores web e componentes de estrutura. Isso significa que seu código de aplicativo agora estará ciente da interface OWIN, mas não do servidor da web que está atendendo a solicitação.

Em troca, os aplicativos podem ser transportados com mais facilidade entre hosts e plataformas / sistemas operacionais potencialmente inteiros. Por exemplo, a capacidade de hospedar um aplicativo em um console ou em qualquer processo permite que o Mono o hospede sem esforços ... (qualquer pessoa que seja o Raspberry Pi)

O segundo aspecto é que ele funciona como um pipeline.


Owin Pipeline


Você pode conectar qualquer middleware (e quantos você desejar) entre o servidor da web e seu aplicativo.
Isso permite soluções mais modulares. Você pode desenvolver middlewares redistribuíveis que podem impactar a solicitação / resposta vinda de / para seu aplicativo, mas mantenha esses módulos separados do código do aplicativo.

Para se convencer dos benefícios dessa abordagem modular, consulte os pacotes de nuget disponíveis para o OWIN: http://www.nuget.org/packages?q=owin

Muitos desses pacotes eram anteriormente a funcionalidade principal do asp.net e foram extraídos como middleware.
Por exemplo, adicionar suporte ao login usando vários provedores OAuth se torna uma preocupação de infraestrutura (um middleware) e não precisa mais fazer parte do código do aplicativo:

Ou se você deseja substituir automaticamente todas as imagens do seu site por imagens fofas de gatos, também é possível fazer isso de forma transparente:

https://github.com/serbrech/Owin.Catify

EDIT: Agora está disponível como um pacote de pepitas : Owin.Catify !

Stéphane
fonte
Sua resposta certamente é boa como votada, mas é difícil para mim descobrir.
Seyed Morteza Mousavi
5
Como posso melhorar? O que você não entende?
Stéphane
1
Embora o OWIN tenha benefícios, parece difícil depurar, pois o fluxo de execução efetivamente "salta" do middleware para o middleware. Cada um deles pode mudar a resposta ao longo do caminho. O depurador de anexos do Visual Studio parece não conseguir seguir o fluxo. E quando uma exceção ocorre (em um aplicativo da Web), você obtém uma página em branco com 200 respostas OK. Nenhum erro em qualquer lugar além do log de eventos do Windows.
Simbolo
7
Achei a explicação em weblogs.asp.net/pglavich/owin-katana-and-getting-started útil. É uma maneira de dissociar seu aplicativo do IIS e a dependência do assembly System.Web. Reduzindo a quantidade de componentes que estão no pipeline HTTP, mantendo o aplicativo leve.
Terence
2
Preciso acrescentar que, no meu ambiente atual, algumas equipes usam WebApi e outras usam Nancy. Como os dois estão em cima do OWIN, podemos compartilhar middlewares, como manipulação da Api Key ou autenticação sem estado, independentemente da estrutura. Deixamos a equipe escolher o que mais lhes convém. Esse é o verdadeiro benefício do OWIN.
Stéphane
209
public interface OWIN
{
   void ListenHttpCallAndServeWebPage();    
}

namespace Microsoft.OWIN
{
   public class Katana : OWIN
   {
      public void ListenHttpCallAndServeWebPage()
      {
         // listen to a port for HTTP call and serve web page
      } 
   }
}

Sim está certo. OWIN é uma interface e Katana é uma implementação da interface OWIN pela Microsoft . Portanto, ouvimos essas duas palavras (OWIN / KATANA) juntas e muitas vezes nos confundimos entre a diferença entre esses dois termos. Portanto, Katana é a implementação da interface OWIN da Microsoft. Digamos que exista outra empresa chamada BIG-BOSS que deseje criar sua própria implementação do OWIN; eles podem fazer isso e nomear sua implementação como 'BATANA' e anunciar frases como OWIN / BATANA.

Então, por que OWIN !!!

Pense em um país onde o único veículo disponível para circulação é um caminhão. Nada mais. Se você quiser comprar um veículo, você compraria caminhão. Bem, isso costumava servir bem, mas as pessoas começaram a perceber que, elas não precisam de caminhão o tempo todo, especialmente quando querem assistir a um filme ou comprar leite, dirigir um caminhão pesado não apenas custa combustível alto, mas também adicione estresse ao dirigir. Mas sim, se eles querem carregar muitas coisas pesadas, o caminhão serve muito bem ao objetivo.

Então, o governo daquele país apresentou uma especificação para os fabricantes de veículos. A especificação é a seguinte:

  1. Um veículo precisa ter 4 rodas
  2. Um veículo deve ter uma direção.
  3. Um veículo deve ter farol e luzes de sinalização.

Portanto, com base nessas especificações, qualquer pessoa pode fabricar veículos de acordo com diferentes necessidades e pode nomear seus veículos de acordo. Portanto, Sedan, caminhonete, SUV, VAN, etc. etc. todo tipo de veículo apareceu no mercado. Se alguém não precisar carregar coisas pesadas o tempo todo, precisar de um veículo apenas para ir ao local de trabalho, ele / ela pode comprar um pouco de Sedan. Alguém pode comprar um utilitário esportivo se precisar de mais energia.

Com base no exemplo acima, podemos dizer que nosso aplicativo da Web ASP.NET usa o System.Web Assembly que é muito carregado (como um caminhão) e se queremos criar um pequeno aplicativo da Web em que nosso objetivo seja servir apenas alguns arquivos com base em em um pequeno conjunto de solicitações, somos obrigados a usar esse conjunto System.Web pesado (caminhão). Agora, o OWIN aparece. OWIN é um conjunto de especificações (podemos chamar de interface) que define um servidor. Com base nessa especificação, alguém (como um fabricante de veículos) pode criar vários tipos de servidores com base em domínios de problemas / necessidades de aplicativos específicos. A Microsoft criou sua própria Implementação para OWIN, chamada Katana, da mesma maneira que pode servir a API da Web. Como o WebAPI é uma tecnologia leve, que não precisa do sistema completo.

Agora, se você perguntar: ' Eu preciso disso'? A resposta é: 'Depende da sua necessidade de desempenho'. Se você não se importa de dirigir seu caminhão, mesmo que vá assistir a um filme, talvez não precise do OWIN. Mas se você sentir isso, um carro Sedan leve é ​​tudo o que você precisa para dirigir dentro de uma cidade, a uma pequena distância, assistir a filmes etc. etc. sim, você pode verificar quais implementações do OWIN estão disponíveis no mercado. O Katana é uma das implementações do OWIN; portanto, você pode verificar o que o Katana oferece. Não apenas Katana, se alguma outra empresa implementa o OWIN de acordo com um domínio específico (por exemplo, um servidor para dispositivos médicos que baixará as informações mais recentes sobre medicamentos) e se você é médico, talvez possa verificar a implementação do OWIN. Além disso, você mesmo pode criar sua própria implementação do OWIN visando qualquer nicho específico.

Em termos de aplicativos da Web, se você é um desenvolvedor simples da Web, desenvolvendo sites personalizados para seus clientes, talvez não precise se preocupar com a implementação personalizada de OWINs, porque o IIS o atenderá de maneira equilibrada. Se você criar um projeto de API da Web, terá o modelo baseado no Katana pronto no Visual Studio -> Novo Projeto, para que não precise se preocupar com nada além de aprender técnicas específicas do Katana. No momento, o Katana não está maduro o suficiente para substituir completamente a necessidade do IIS para o ASP.NET MVC, mas talvez, no futuro, ele o faça.

Então, quando eu precisar escrever minha própria implementação OWIN?

Resposta: Bem, digamos, por exemplo, você desenvolveu um aplicativo Windows que deve ser executado como servidor em segundo plano e ouvir um número de porta XXXX. Seu servidor responderá apenas a um conjunto de solicitações como este:

  1. GET Inventory
  2. DELETE ID do inventário = 4
  3. ID do inventário PUT = 5

Isso é tudo. E nada mais. Então, por que você precisaria de um servidor Web IIS completo para esta pequena tarefa? Você pode criar sua própria implementação OWIN nesse caso. (Talvez você use Katana para isso)

Ok, entendi que, se eu quiser criar um site ASP.NET MVC, não tenho a opção de substituir o IIS, então por que preciso saber sobre Katana neste momento?

Resposta: Embora o Katana não seja maduro o suficiente para substituir a necessidade do IIS, para que você possa hospedar seu site ASP.NET MVC diretamente no Katana, o Katana implementou muitas interfaces interessantes do OWIN, para que você possa aproveitar o uso desses recursos. ao lado. Por exemplo, permitir que seus usuários façam login usando o Facebook, Google, Twitter etc. não era muito fácil antes. O Katana oferece muitos ganchos (como um middleware) para que você possa permitir que o Katana cuide da autenticação externa baseada em mídia social facilmente sem escrever código de encanamento. Existem muitos outros benefícios no uso do Katana que você pode descobrir ao começar a usar essa tecnologia.

Emran Hussain
fonte
1
Eu não diria que o OWIN é uma interface, por exemplo, é um padrão, um protocolo para padronizar a maneira como um aplicativo fala com o host. Mas é importante precisar que o Katana seja apenas uma implementação desse padrão desenvolvido e mantido pela microsoft. Outras implementações estão listadas aqui: github.com/owin/owin/wiki/Implementations
Stéphane
1
um pouco confuso quando você diz que a especificação de um veículo é '4 rodas' e alguém faz um veículo de 18 rodas ... não se encaixa na especificação, então é? Ou eu estou esquecendo de alguma coisa. Boa analogia de qualquer maneira.
Tornou
1
@ Stephanie: Bem, pode não ser apenas uma interface, tentei dar uma idéia de alto nível para que alguém possa entender o relacionamento entre OWIN e KATANA sem ficar sobrecarregado com muitos jargões técnicos.
Emran Hussain
1
"Embora o Katana não seja maduro o suficiente para substituir a necessidade do IIS, para que você possa hospedar seu site ASP.NET MVC diretamente no Katana" parece indicar que o IIS não é importante quando o Katana for 1.0. Não, não, isso não está correto. A Microsoft tem o Microsoft.Owin.Host.IIS disponível, o que permite que os aplicativos Web + Katana sejam hospedados diretamente no IIS (sem o System.Web, é claro). O IIS ainda é um componente essencial para aplicativos ASP.NET na plataforma Microsoft.
Lex Li
2
Seria ótimo, se você puder me ajudar a entender #what is lightweight part, i mean if Katana is compared to IIS, by which means it is lightweight ( say it does not do step#1,2,3 etc.. , but IIS does that.
Arindam Nayak
47

Uma versão mais simples dessa resposta é que o Katana está pronto para substituir completamente o conjunto System.Web e o antigo pipeline do ASP.NET, o que oferece uma melhor flexibilidade (use-o em mais cenários e use apenas as peças que você gosta) e desempenho.

Portanto, todos devem assistir a sua evolução agora e estar prontos para mudar quando ela estiver finalmente concluída.

Abaixo está um diagrama que eu desenhei para preencher os detalhes que a Microsoft não inclui neste artigo .

insira a descrição da imagem aqui

OWIN é um padrão que permite que as estruturas de aplicativos sejam executadas nele e esqueça tudo o que está abaixo dele. Por outro lado, o próprio OWIN utiliza vários adaptadores de host para garantir que ele possa conversar com os servidores Web subjacentes (IIS e muitos outros).

Agora estou trabalhando com o autor do servidor da Web Jexus para investigar como podemos escrever um adaptador host para conectar o OWIN / Katana e o Jexus. Estamos muito felizes em saber que o OWIN é flexível e altamente personalizável.

Referência: http://blog.lextudio.com/2014/06/why-owin-matters-a-lot-for-asp-net-developers/

Lex Li
fonte
Então, nesta resposta, você diz que "Katana é um substituto completo para substituir o conjunto System.Web e o antigo pipeline do ASP.NET". Isso significa que ele pode substituir todos os adaptadores de servidor em seu diagrama acima, ou talvez apenas host.systemweb?
Netfed
@netfed infelizmente, o próprio OWIN o faz e agora o ASP.NET Core assume o controle. Esta pergunta e as respostas estão desatualizadas.
Lex Li
Aha !! Então, o núcleo do Asp.net possui capacidades Owin? Ou o núcleo do Asp.net funciona como uma coleção de módulos, onde você pode implementar apenas os módulos necessários e não precisar usar uma coleção maior de funções incorporadas ao System.web?
Netfed
2
@netfed, OWIN morre (meu teclado móvel mudou minhas palavras). O ASP.NET Core mantém a abordagem do middleware, e você pode montar seus componentes da maneira que desejar e nada mais System.Web.
Lex Li
Isso conclui tudo :-) Obrigado por esclarecer.
Netfed
15

Por que devo usar o OWIN, enquanto posso usar o IIS?

OWIN foi projetado para separar servidores da Web das estruturas em que você trabalha. Ele pode tornar os aplicativos leves e portáteis para estruturas e servidores de mixagem.

E Katana é a implementação da Microsoft de componentes OWIN.

Desde os últimos anos, a Microsoft está tornando as ferramentas da Web mais ágeis e responsivas à medida que o plano está progredindo. Por exemplo, o desenvolvimento do ASP.Net MVC e do ASP.Net Web API. Eles não dependem da DLL System.Web, que é um enorme fardo que eles sentem agora, eu acho. A vantagem é que ambos os desenvolvimentos podem ser fornecidos em tempo hábil e o ciclo está mais rápido do que nunca. Agora, os desenvolvedores também podem implantar esses aplicativos em hosts OWIN personalizados ou no Katana, que é uma referência da implementação do OWIN.

Qual é o objetivo, afinal?

A Microsoft lançou um projeto que é um host leve baseado em OWIN no IIS, chamado `Helios. O objetivo é evitar o relacionamento do ASP.NET/IIS, fornecendo alguns componentes pequenos e independentes que podem ser usados, instalados e gerenciados de forma independente em execução em um host da web que implementa as especificações OWIN.

Um dos principais motivos é o fator de desempenho. A Helios poderá obter uma taxa de transferência 2x a 3x mais do que o aplicativo ASP.Net padrão. Em termos de consumo de memória, o Helios é muito melhor que o System.Web dll. Em uma comparação feita, a arquitetura Helios permitiu que um aplicativo de amostra atingisse 50000 solicitações simultâneas com aproximadamente 1 GB a menos de sobrecarga em comparação com um aplicativo ASP.Net padrão.

nznoor
fonte
1
Você pode achar este post útil. simple-talk.com/dotnet/.net-framework/...
nznoor
0

OWIN é uma abstração entre o aplicativo Web e a plataforma de hospedagem. Se você escrever seu aplicativo Web usando OWIN, não está vinculado ao IIS, poderá usar outro host, se desejar.

Você perguntou por que usar o OWIN em vez do IIS, mas essas não são alternativas uma para a outra. O OWIN fica entre o IIS e seu aplicativo, para que você possa mudar o IIS sem reescrever seu aplicativo.

Você também pode conferir esta página https://github.com/Bikeman868/OwinFramework/wiki/OWIN

bikeman868
fonte