Como explicar Katana e OWIN em palavras e usos simples?

337

Eu li muitos artigos sobre os projetos OWIN e Katana, mas não consegui ter uma idéia completa.

Para um desenvolvedor web normal que usa o ASP.NET:

  1. O que exatamente é OWIN e quais problemas ele resolve (em palavras simples). Qual é a sua relação com o IIS?
  2. OWIN substitui o IIS? caso contrário, em que situações o OWIN se encaixa melhor?
  3. Como a OWIN poderia me ajudar em meus projetos de trabalho diário?
  4. Como o OWIN poderia me ajudar em projetos de auto-aperfeiçoamento?
ebram khalil
fonte
Você pode considerar a possibilidade de alterar a resposta aceita, considerando que alguns marcadores não estão realmente corretos - são enganosos.
Admir Tuzović
3
Meu livro no ASP.net sugere a implementação de Identity e da classe UserManager através do OWIN e eu realmente não entendo o ponto. Ele me deixou completamente confuso ...
Lucas

Respostas:

409

Em relação ao comentário acima, o OWIN não é uma estrutura. OWIN é uma especificação de como os servidores e aplicativos da Web devem ser criados para dissociá-los e permitir a movimentação de aplicativos ASP.NET para ambientes que não eram suportados anteriormente.

Antes do OWIN, ao criar o aplicativo ASP.NET, você estava inerentemente vinculado ao IIS devido à grande dependência do System.Webassembly.

System.Web é algo que existe desde o ASP (versão não .NET) e contém internamente muitas coisas que você nem precisa (como Formulários da Web ou Autorização de URL), que por padrão são executadas em todas as solicitações, consumindo recursos e tornando o ASP Aplicativos .NET em geral muito mais lentos que seus equivalentes, como Node.js. por exemplo.

O OWIN em si não possui nenhuma ferramenta, biblioteca ou qualquer outra coisa. É apenas uma especificação.

Katana, por outro lado, é uma estrutura totalmente desenvolvida para fazer uma ponte entre as estruturas atuais do ASP.NET e a especificação OWIN. No momento, Katana adaptou com êxito as seguintes estruturas do ASP.NET ao OWIN:

  • API da Web
  • Sinal R

O ASP.NET MVC e os Web Forms ainda estão sendo executados exclusivamente via System.Web e, a longo prazo, há um plano para dissociá-los também.

Por outro lado, o IIS é um host bom e com recursos para servidores web. Problemas inteiros de desempenho do ASP.NET usando o IIS têm raízes profundas System.Webapenas. Até o momento recente, ao decidir como você hospedaria seu servidor da web, você tinha duas opções:

  • IIS
  • Auto-host

Portanto, se você quiser uma performance, opte por uma opção de auto-host. Se você quisesse muitos recursos prontos que o IIS fornece, você optaria pelo IIS, mas perderia o desempenho.

Agora, existe uma terceira opção, uma biblioteca da Microsoft chamada Helios (nome de código atual) que pretende removerSystem.Web o caminho e permitir que você use o IIS de maneira mais "limpa", sem bibliotecas ou módulos desnecessários. O Helios agora está na versão de pré-lançamento e aguarda mais comentários da comunidade para torná-lo totalmente compatível com o produto da Microsoft.

Espero que esta explicação esclareça melhor as coisas para você.

EDIT (setembro de 2014):

Com o ASP.NET vNext em desenvolvimento, Katana está se aposentando lentamente. A versão 3.0 provavelmente será o último grande lançamento do Katana como uma estrutura autônoma.

No entanto, todos os conceitos introduzidos com o Katana estão sendo integrados ao ASP.NET vNext, o que significa que o modelo de programação será praticamente o mesmo. Citação da postagem do fórum feita por David Fowler (arquiteto do ASP.NET vNext):

vNext é o sucessor de Katana (e é por isso que eles são tão parecidos). Katana foi o começo da separação do System.Web e de componentes mais modulares para a pilha da web. Você pode ver o vNext como uma continuação desse trabalho, mas indo muito além (novo CLR, novo Sistema de Projetos, novas abstrações http).

Tudo o que existe hoje em Katana chegará ao vNext.

EDIT (fevereiro de 2015):

O ASP.NET vNext agora é conhecido como ASP.NET 5 e será construído sobre o .NET Core 5. O .NET Core 5 é uma versão fatorada leve do .NET Framework, projetada para suportar os objetivos do ASP.NET 5 e .NET Native . No entanto, o ASP.NET 5 também será suportado pelo .NET Framework 4.6, que deverá estar disponível junto com o .NET Core 5. O ASP.NET 5 e o .NET Core 5 serão licenciados pelo MIT e aceitarão contribuições da comunidade.

EDIT (maio de 2015):

Além disso, a marca ASP.NET Web API será descontinuada, no entanto, sua tecnologia será a base do novo ASP.NET MVC 6. As versões anteriores do ASP.NET MVC foram criadas com a implementação do IHttpHandler, uma interface definida em System.Web. O ASP.NET MVC 6 remove essa dependência, tornando-a portátil para várias plataformas e servidores web.

EDIT (maio de 2016):

O ASP.NET 5 será renomeado oficialmente para ASP.NET Core, começando com o Release Candidate 2, que está programado para ser lançado em breve. O mesmo se aplica ao Entity Framework 7, que será renomeado para Entity Framework Core. Mais informações sobre o anúncio oficial e os motivos por trás dele podem ser encontradas na postagem do blog de Scott Hanselman: O ASP.NET 5 está morto - Apresentando o ASP.NET Core 1.0 e o .NET Core 1.0

EDIT (maio de 2016):

Com o lançamento do Release Candidate 2, o ASP.NET Core foi modificado para que futuros aplicativos Web sejam na verdade apenas aplicativos de console do .NET Core configurados para processar solicitações HTTP recebidas . Esse conceito torna o ASP.NET Core ainda mais alinhado com a abordagem adotada pela Microsoft com o suporte à arquitetura de microsserviços e sua implementação por meio do Azure Service Fabric. Mais informações podem ser encontradas na postagem oficial do blog: Anunciando o ASP.NET Core RC2

Admir Tuzović
fonte
2
@ebramtharwat Agora, um ano mais tarde, ele não se parece com Helios é uma coisa
Andrew Savinykh
11
Você mencionou que o Katana v3 provavelmente será o último grande lançamento, então, avançando, qual estrutura será usada para substituir o Katana?
Vincent
2
Os recursos do Katana foram integrados no ASP.NET 5. O Katana continuará existindo para compatibilidade com versões anteriores.
Admir Tuzović
2
@ AdmirTuzović: ótima resposta. Mais atualizações a serem adicionadas desde maio de 2016?
Igby Largeman
2
A resposta inicial com edições subsequentes explica muito bem as transições. Obrigado pelo esforço.
Sang Suantak
71

Se eu tiver que definir o OWIN para mim, isso seria: "As melhores idéias das comunidades de desenvolvimento web Ruby e Node.js., chegando ao .NET"

Mas isso não ajudaria nenhum desenvolvedor do ASP.NET. Minha própria definição seria algo como:

OWIN define uma interface padrão entre servidores da Web .NET e aplicativos da Web. O objetivo da interface OWIN é desacoplar servidor e aplicativo. Se eu tiver que responder às perguntas que você colocou, então aqui está:

  1. OWIN é uma especificação de interface. Ele desacopla aplicativos da Web do IIS.

  2. Se você estiver usando componentes prontos (que é o que é o Katana), algumas partes da funcionalidade do aplicativo são muito mais fáceis de implementar em comparação com o ASP.NET antigo. A autenticação com provedores de identidade de terceiros (Facebook, Twitter) é um exemplo disso.

  3. OWIN é essencialmente uma coleção de melhores práticas, que foram comprovadas em comunidades de desenvolvimento da web. Ele mostra uma maneira de implementar aplicativos da web que é muito aberto à extensibilidade. Como cada desenvolvedor da web deve estar constantemente na vanguarda das novas tecnologias, essa é uma maneira de manter-se atualizado com toda a comunidade de desenvolvimento da web e não apenas com o .NET. Se você aprender OWIN, seria muito mais fácil aprender outras estruturas de desenvolvimento da Web, como o Express for node.js ou o Rack for Ruby, porque as práticas usadas são semelhantes.
Slavo
fonte
11
Este artigo também pode ajudar a ter uma idéia dos problemas históricos resolvidos por OWIN / katana: asp.net/aspnet/overview/owin-and-katana/… . Dito isto, apenas essas estruturas são suportadas agora no host OWIN : owin.org/#projects . Se o seu aplicativo usar qualquer uma dessas estruturas de aplicativos, ele poderá ser hospedado no OWIN.
Praburaj
Você pode postar aqui a sequência de solicitações recebidas do navegador até o ponto de resposta que retorna ao navegador ao usar o owinhost.exe. Não consegui encontrar um documento neste tópico.
Saravanan 18/03
2
Os pontos 1 e 2 são enganosos, o OWIN não pode substituir nada sozinho. Como o ponto 4, é apenas uma especificação que requer implementação de alguma forma, com implementações de referência da Microsoft sendo Katana e Helios até agora.
Mani Gandham
As melhores idéias das comunidades de desenvolvimento web Ruby e Node.js., chegando ao .NET ... podem listar algumas dessas \
Lakshay
11
Middleware. Desacoplar o aplicativo do ambiente de hospedagem, tornando esses conectáveis.
Slavo 28/01
59

Vou tentar cobri-lo da perspectiva prática.

Katana é o nome do projeto para implementar o OWIN na Microsoft .

O que exatamente é OWIN e quais problemas ele resolve (em palavras simples). Qual é a sua relação com o IIS? OWIN ( Open Web Interface for .NET ) é um padrão ( OWIN Specification ) e Katana é a biblioteca .NET, você pode obter pepitas aqui . OWIN e Katana tornaram-se um tanto sinônimo na web.
Antes do OWIN, sua única opção era o IISOWIN, você pode usar qualquer outro aplicativo (que tenha ponto de entrada) como servidor da web.

OWIN substitui o IIS? caso contrário, em que situações o OWIN se encaixa melhor?
Não, ele não substitui o IIS, você pode usar o OWIN e o IIS Microsoft.Owin.Host.SystemWebpepitas para isso . É mais adequado se você deseja otimizar / alterar a maneira como ele é tratado no IIS ou se deseja criar seu servidor Web personalizado, digamos, Windows Forms Application.

Como a OWIN poderia me ajudar em meus projetos de trabalho diário?
Isso poderia reduzir os custos de execução do servidor, já que seus servidores da Web não precisam mais ser executados no IIS (Windows) (os servidores Windows são mais caros que os baseados em Unix e você pode executá-lo no aplicativo de console em Mono no Linux).

Como o OWIN poderia me ajudar em projetos de auto-aperfeiçoamento?
O aprendizado Microsoft.Owin(e outras bibliotecas OWIN relacionadas) melhorará seu conhecimento sobre como a comunicação HTTP entre o cliente e o servidor da web funciona.

Boa leitura, se você quiser entender mais sobre o que é Katana e OWIN.

Matas Vaitkevicius
fonte
6
Bem feito e obrigado por responder diretamente às perguntas postadas, em vez de se aventurar pela pista tangencial.
Dav
E se sempre usarmos o servidor com capacidade Microsoft IIS para hospedagem? Parece que o OWIN é o padrão nos novos modelos WebApi2. Devo removê-lo como referência se pretendo hospedar apenas / sempre no IIS?
TechTurtle
@ TechTurtle Hi Tech, eu recomendaria publicá-la como uma pergunta separada.
Matas Vaitkevicius
Explicação muito clara. Obrigado por informações úteis
Uttam
9

O que é o OWIN?

OWIN significa Open Web Interface for .NET. OWIN é uma especificação que descreve como as estruturas de desenvolvimento da Web, como o ASP.NET MVC, devem interagir com os servidores da Web. O objetivo do OWIN é desacoplar aplicativos da web do servidor da web, introduzindo uma camada de abstração. Essa abstração permite executar o mesmo aplicativo em todos os servidores da Web que suportam OWIN. Além disso, simplifica o sistema geral porque a camada de abstração pode fornecer uma infraestrutura leve para hospedar os aplicativos. O IIS fornece um rico conjunto de recursos para os aplicativos Web. No entanto, os aplicativos da web podem não precisar de todos esses recursos. Pode ser suficiente que eles tenham recursos mínimos de processamento HTTP. O host compatível com OWIN pode fornecer um ambiente de hospedagem para esses aplicativos. Além disso, você pode definir um pipeline de módulos que são usados ​​durante o processamento da solicitação. Um pipeline OWIN é uma cadeia de componentes compatíveis com OWIN através dos quais uma solicitação passa.

O que é Katana?

Katana é um conjunto de componentes criados pela Microsoft usando as especificações OWIN. Alguns desses componentes incluem Web API, ASP.NET Identity e SignalR.

Acima está um trecho do artigo CodeGuru: http://www.codeguru.com/csharp/.net/net_asp/overview-of-owin-and-katana.htm

Venkatesh Muniyandi
fonte