¿Cuándo debo usar OWIN Katana?

270

Soy nuevo en OWIN y Katana. Realmente no entiendo por qué debería usar OWIN, mientras que puedo usar IIS. Para simplificar, mi pregunta es: ¿qué pierdo si omito el aprendizaje de OWIN y uso IIS para mis sitios web?

Busqué en Google pero no hay una explicación simple. Hay alguna información aquí , pero utilizan algunas frases de la jerga así que no puedo entenderlo.

Seyed Morteza Mousavi
fuente
2
Me pregunto cuánto influye la dirección OWIN en IoT. Realmente no puedo pegar IIS en un Arduino, ¿verdad?
Sentinel

Respuestas:

279

En asp.net WebApi v2, la canalización OWIN se convierte en la predeterminada. Eventualmente será la tubería estándar en cualquier proyecto asp.net.

No puedo decirlo mejor de lo que está escrito aquí: http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

La sección "La interfaz web abierta para .NET (OWIN)" explica perfectamente los objetivos de OWIN.

Sin OWIN, los bits asp.net se acoplan a la forma en que IIS se comunica con la aplicación. OWIN extrae servidores web y componentes de framework. Eso significa que su código de aplicación ahora estará al tanto de la interfaz OWIN, pero no del servidor web que atiende la solicitud.

A cambio, las aplicaciones se pueden portar más fácilmente entre hosts y plataformas / sistemas operativos potencialmente enteros. Por ejemplo, la capacidad de alojar una aplicación en una consola o cualquier proceso le permite a Mono alojarla sin esfuerzo ... (Raspberry Pi, cualquiera)

El segundo aspecto es que funciona como una tubería.


Tubería Owin


Puede conectar cualquier middlewares (y tantos como desee) entre el servidor web y su aplicación.
Esto permite más soluciones modulares. Puede desarrollar middlewares redistribuibles que puedan afectar la solicitud / respuesta que llega a / desde su aplicación, pero mantenga estos módulos separados del código de la aplicación.

Para convencerse de los beneficios de este enfoque modular, eche un vistazo a los paquetes nuget disponibles para OWIN: http://www.nuget.org/packages?q=owin

Muchos de estos paquetes eran anteriormente funciones básicas de asp.net, y se han extraído como middleware.
Por ejemplo, agregar soporte para iniciar sesión con varios proveedores de OAuth se convierte en un problema de infraestructura (un middleware) y ya no necesita ser parte de su código de aplicación:

O si desea reemplazar automáticamente todas las imágenes de su sitio web por lindas imágenes de gatos, también puede hacerlo de manera transparente:

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

EDITAR: ahora está disponible como un paquete nuget : Owin.Catify !

Stéphane
fuente
Su respuesta seguramente es buena, ya que votó positivamente, pero es difícil para mí entenderlo.
Seyed Morteza Mousavi el
55
¿Cómo puedo mejorarlo? Que no entiendes
Stéphane
1
Si bien OWIN tiene beneficios, parece difícil de depurar ya que el flujo de ejecución efectivamente 'saltará' de middleware a middleware. Cada uno potencialmente cambiando la respuesta en el camino. El depurador de archivos adjuntos de Visual Studio no parece ser capaz de seguir el flujo. Y cuando ocurre una excepción (en una aplicación web), solo obtendrá una página en blanco con una respuesta 200 OK. No hay error en ninguna parte aparte del registro de eventos de Windows.
simbolo
77
Encontré la explicación en weblogs.asp.net/pglavich/owin-katana-and-getting-started útil. Es una forma de desacoplar su aplicación de IIS y la dependencia del ensamblado System.Web. Reduciendo la cantidad de componentes que están en la tubería HTTP, manteniendo así la aplicación ligera.
Terence
2
Necesito agregar que en mi entorno actual, algunos equipos usan WebApi y otros usan Nancy. Dado que ambos están sentados encima de OWIN, podemos compartir middlewares como el manejo de la clave Api o la autenticación sin estado, independientemente del marco. Dejamos que el equipo elija lo que más les convenga. Ese es el verdadero beneficio de 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
      } 
   }
}

Sí, eso es correcto OWIN es una interfaz y Katana es una implementación de la interfaz OWIN de Microsoft . Por lo tanto, escuchamos estas 2 palabras (OWIN / KATANA) juntas y muchas veces nos confundimos entre la diferencia entre estos 2 términos. Entonces, Katana es la implementación de Microsoft de la interfaz OWIN. Digamos que hay otra compañía llamada BIG-BOSS que quería crear su propia implementación de OWIN, pueden hacerlo y nombrar su implementación como 'BATANA' y anunciar frases como OWIN / BATANA.

Entonces, ¿por qué OWIN!

Piense en un país donde el único vehículo disponible para moverse es un camión. Nada más. Si desea comprar un vehículo, compraría un camión. Bueno, eso solía servir bien, pero la gente comenzó a darse cuenta de que no necesitan camiones todo el tiempo, especialmente cuando quieren ir a ver una película o comprar leche, conducir un camión pesado no solo cuesta mucho combustible, sino que también Añadir estrés en la conducción. Pero sí, si quieren llevar muchas cosas pesadas, el camión sirve muy bien el propósito.

Luego, el gobierno de ese país presentó una especificación para los fabricantes de vehículos. La especificación es la siguiente:

  1. Un vehículo debe tener 4 ruedas.
  2. Un vehículo debe tener una dirección.
  3. Un vehículo debe tener faros y luces de señalización.

Entonces, según estas especificaciones, cualquiera puede fabricar un vehículo de acuerdo con diferentes necesidades y puede nombrar su vehículo en consecuencia. Por lo tanto, Sedan, camioneta, SUV, VAN, etc., todo tipo de vehículo apareció en el mercado. Si alguien no necesita llevar cosas pesadas todo el tiempo, sino que necesita un vehículo solo para ir al lugar de trabajo, puede comprar un pequeño sedán. Alguien puede comprar SUV si necesita un poco más de potencia.

Según el ejemplo anterior, podemos decir que nuestra aplicación web ASP.NET usa System.Web Assembly, que está muy cargada (como un camión) y si queremos hacer una pequeña aplicación web donde nuestro propósito es servir solo algunos archivos en un pequeño conjunto de solicitudes, estamos obligados a utilizar ese sistema pesado. Conjunto web (camión). Ahora, OWIN aparece. OWIN es un conjunto de especificaciones (podemos llamarlo interfaz) que define un servidor. Según esa especificación, alguien (como un fabricante de vehículos) puede hacer varios tipos de servidores en función de los dominios de problemas específicos / necesidades de la aplicación. Microsoft creó su propia Implementación para OWIN llamada Katana de la misma manera que puede servir API web. Como WebAPI es una tecnología ligera, que no necesita un sistema completo.

Ahora, si preguntas, ' ¿Lo necesito?'? La respuesta es: "Depende de su necesidad de rendimiento". Si no le importa conducir su camión incluso para ir a ver una película, entonces, tal vez no necesite OWIN. Pero si siente eso, un automóvil Sedan ligero es todo lo que necesita para conducir dentro de una ciudad, a poca distancia, ver películas ... etc., sí, puede verificar qué implementaciones de OWIN están disponibles en el mercado. Katana es una de las implementaciones de OWIN, por lo tanto, puede verificar lo que ofrece Katana. No solo Katana, si alguna otra compañía implementa OWIN de acuerdo con un Dominio específico (por ejemplo, un servidor para Dispositivos Médicos que descargará la información más reciente sobre medicamentos) y si usted es médico, tal vez, puede verificar esa implementación de OWIN. Además, usted mismo puede crear su propia implementación de OWIN dirigida a cualquier nicho específico.

En términos de aplicaciones web, si usted es un desarrollador web simple, que desarrolla sitios web personalizados para sus clientes, tal vez no tenga que preocuparse por la implementación personalizada de OWIN, porque IIS le servirá de manera equilibrada. Si crea un proyecto de API web, obtendrá una plantilla basada en Katana preparada a partir de Visual Studio -> Nuevo proyecto, por lo que no tendrá que preocuparse por nada más que aprender técnicas específicas de Katana. En este momento, Katana no es lo suficientemente madura como para reemplazar completamente la necesidad de IIS para ASP.NET MVC, pero tal vez, en el futuro lo hará.

Entonces, ¿cuándo necesito escribir mi propia implementación de OWIN?

Respuesta: Bueno, digamos, por ejemplo, que ha desarrollado una aplicación de Windows que debe ejecutarse como un servidor en segundo plano y escuchar un número de puerto XXXX. Su servidor responderá solo a un conjunto de solicitudes como esta:

  1. OBTENER inventario
  2. BORRAR ID de inventario = 4
  3. PONER ID de inventario = 5

Eso es todo. Y nada más. Entonces, ¿por qué necesitarías un servidor web IIS completo para esta pequeña tarea? Puede crear su propia implementación de OWIN en ese caso. (Tal vez, usarás Katana para eso)

Ok, entendí que, si quiero crear un sitio web ASP.NET MVC, no tengo la opción de reemplazar IIS, entonces ¿por qué debería saber sobre Katana en este momento?

Respuesta: Aunque Katana no es lo suficientemente madura como para reemplazar la necesidad de IIS para que pueda alojar su sitio web ASP.NET MVC directamente en Katana, pero Katana implementó muchas interfaces interesantes de OWIN para que pueda aprovechar la ventaja de usar esas características al lado. Por ejemplo, antes de permitir a sus usuarios iniciar sesión con Facebook, Google, Twitter, etc., no era muy fácil. Katana le ofrece muchos ganchos (como middleware) para que pueda dejar que Katana se encargue fácilmente de la autenticación externa basada en redes sociales sin escribir código de plomería. Hay muchos otros beneficios al usar Katana que puede descubrir cuando comience a usar esta tecnología.

Emran Hussain
fuente
1
No diría que OWIN es una interfaz por decir, es un estándar, un protocolo para estandarizar la forma en que una aplicación se comunica con el host. Pero es importante precisar que Katana es solo una implementación de ese estándar desarrollado y mantenido por Microsoft. Otras implementaciones se enumeran aquí: github.com/owin/owin/wiki/Implementations
Stéphane
1
un poco confuso cuando dice que la especificación para un vehículo es '4 ruedas' y luego alguien hace un vehículo de 18 ruedas ... no se ajusta a la especificación, ¿verdad? O me estoy perdiendo algo. Buena analogía de todos modos. Hecho más fácil de entender
kurasa
1
@Stephane: Bueno, puede que no sea solo como una interfaz, traté de dar una idea de alto nivel para que alguien pueda entender la relación entre OWIN y KATANA sin sentirse abrumado con muchos jergas técnicas.
Emran Hussain
1
"Aunque Katana no es lo suficientemente maduro como para reemplazar la necesidad de IIS para que pueda alojar su sitio web ASP.NET MVC directamente en Katana", parece indicar que IIS no es importante una vez que Katana es 1.0. No, no, eso no es correcto. Microsoft tiene Microsoft.Owin.Host.IIS disponible, lo que permite que las aplicaciones web + Katana se alojen directamente en IIS (sin System.Web, por supuesto). IIS sigue siendo un componente clave para las aplicaciones ASP.NET en la plataforma Microsoft.
Lex Li
2
Sería genial, si me pueden ayudar a comprender ...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

Una versión más simple de esa respuesta es que Katana es gong para reemplazar completamente el ensamblaje de System.Web y la antigua tubería ASP.NET, lo que le brinda una mayor flexibilidad (úsela en más escenarios y use solo las partes que desee) y el rendimiento.

Por lo tanto, todos deberían ver su evolución ahora y estar listos para cambiar cuando finalmente se complete.

A continuación se muestra un diagrama que dibujé para completar los detalles que Microsoft no puede incluir en este artículo .

ingrese la descripción de la imagen aquí

OWIN es un estándar tal que permite que los marcos de aplicaciones se ejecuten sobre él y se olviden de todo lo que se encuentra debajo. Por otro lado, OWIN utiliza varios adaptadores de host para asegurarse de que puede comunicarse con los servidores web subyacentes (IIS y muchos otros).

Ahora estoy trabajando con el autor del servidor web Jexus para investigar cómo podemos escribir un adaptador host para unir OWIN / Katana y Jexus. Estamos muy contentos de saber que OWIN es flexible y altamente personalizable.

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

Lex Li
fuente
Entonces, esta respuesta dice que "Katana es un gong para reemplazar completamente el ensamblaje System.Web y la antigua tubería ASP.NET". ¿Eso significa que puede reemplazar todos los adaptadores de servidor en su diagrama anterior, o tal vez solo host.systemweb?
netfed
@netfed desafortunadamente OWIN sí lo hace y ahora ASP.NET Core se hace cargo. Esta pregunta y las respuestas están todas desactualizadas.
Lex Li
Aha !! ¿Entonces el núcleo de Asp.net tiene capacidades de Owin? ¿O Asp.net core funciona como una colección de módulos, donde puede implementar solo los módulos que necesita y no tener que usar una colección más grande de funciones integradas en System.web?
netfed
2
@netfed, OWIN muere (mi teclado móvil cambió mis palabras). Sin embargo, ASP.NET Core mantiene el enfoque de middleware, y puede ensamblar sus componentes de la manera que desee, y nada más System.Web.
Lex Li
Eso concluye todo :-) Gracias por aclarar.
netfed
15

¿Por qué debería usar OWIN, mientras puedo usar IIS?

OWIN está diseñado para desacoplar servidores web de los marcos en los que trabaja. Puede hacer que las aplicaciones sean livianas y portátiles para los marcos de mezcla y servidores.

Y Katana es la implementación de Microsoft de componentes OWIN.

Desde los últimos años, Microsoft está haciendo que las herramientas web sean más ágiles y receptivas a medida que avanza su plan. Por ejemplo, el desarrollo de ASP.Net MVC y ASP.Net Web API. No dependen de System.Web dll, que es una carga enorme que sienten ahora, creo. La ventaja es que ambas soluciones de desarrollo se pueden proporcionar de manera oportuna y el ciclo es más rápido que nunca. Además, ahora los desarrolladores pueden implementar estas aplicaciones en hosts OWIN personalizados o Katana, que es una referencia de la implementación de OWIN.

¿Cuál es el punto después de todo?

Microsoft ha lanzado un proyecto que es un host web ligero basado en OWIN sobre IIS, llamado `Helios. El objetivo es evitar la relación ASP.NET/IIS al proporcionar algunos componentes pequeños independientes que se pueden usar, instalar y administrar de forma independiente en un host web que implementa las especificaciones OWIN.

Una de las razones principales es el factor de rendimiento. Helios podrá lograr un rendimiento 2x-3x más que la aplicación ASP.Net estándar. En términos de consumo de memoria, Helios es mucho mejor que System.Web dll. En un punto de referencia tomado, la arquitectura Helios permitió que una aplicación de muestra lograra 50000 solicitudes concurrentes con aproximadamente 1 GB menos de sobrecarga en comparación con una aplicación ASP.Net estándar.

nznoor
fuente
1
Puede encontrar esta publicación útil. simple-talk.com/dotnet/.net-framework/…
nznoor
0

OWIN es una abstracción entre la aplicación web y la plataforma de alojamiento. Si escribe su aplicación web usando OWIN no está vinculado a IIS, puede usar otro host si lo desea.

Preguntó por qué usar OWIN en lugar de IIS, pero no son alternativas entre sí. OWIN se encuentra entre IIS y su aplicación para que pueda cambiar IIS sin tener que volver a escribir su aplicación.

También puede consultar esta página https://github.com/Bikeman868/OwinFramework/wiki/OWIN

bikeman868
fuente