Está en la página 1de 9

Tecnológico de Estudios Superiores de

Ecatepec
División Ingeniería en Sistemas
Computacionales
Academia Diseño en Ingeniería

Asignatura: Base de Datos Para Dispositivos Móviles

“OWIN”

Alumno: Gómez Toral Jesús Manuel

Docente: César Zapiaín Cruz

Grupo:
5801
OWIN
OWIN define una interfaz estándar entre los servidores web .NET y las
aplicaciones web. El objetivo de la interfaz OWIN es desacoplar el servidor y la
aplicación, fomentar el desarrollo de módulos simples para el desarrollo web
.NET y, al ser un estándar abierto, estimular el ecosistema de código abierto de
las herramientas de desarrollo web .NET.
El diseño de esta abstracción ha tenido dos objetivos fundamentales, crear una
abstracción lo más simple posible y que utilice las mínimas dependencias
posibles. Todo esto nos ayuda a la hora de crear nuevos componentes, ya que
nos permite desarrollarlos más fácilmente y son más fáciles de utilizar e integrar
en el resto de proyectos. Además, esto nos proporciona la posibilidad de cambiar
entre diferentes servidores hosts o incluso tener aplicaciones web hospedadas
en nuestro propio proceso.
Esto se ha conseguido mediante dos elementos. El primero es un diccionario con
las variables de entorno donde se guarda el estado de toda la información para
procesar las peticiones y respuestas realizadas al servidor. El diccionario con las
variables de entorno se define como:
IDictionary<string, object>
Un servidor web compatible con OWIN es responsable de crear este diccionario
con los datos de las peticiones y respuestas, como las cabeceras, el cuerpo, los
parámetros.
El segundo elemento que nos proporciona OWIN es el application delegate, que
es el que se encarga de ejecutar los diferentes componentes pasándoles como
parámetro el diccionario anterior y devolviendo una Task. Se define como:
Func<IDictionary<string, object>, Task>;
Con esta abstracción se consiguen una serie de objetivos:
 Tener un número mínimo de dependencias.
 Obtener un mayor rendimiento gracias al diseño asíncrono.
 Poder crear pipelines complejos.
Katana/OWIN
Mientras OWIN es mantenido por la comunidad, el proyecto Katana son los
componentes de OWIN creados por Microsoft. Aunque estos también los
encontramos como software libre. Entre estos componentes podemos encontrar
SignalR y Wep API.
Los principales objetivos del proyecto Katana son:
 Componentes portables, fácilmente sustituibles por nuevos
componentes y fácilmente actualizables sin alterar al resto de
componentes. Además, implica que los mismos pueden ser ejecutados
tanto en un IIS como en un servidor de terceros o incluso en procesos
nuestros como aplicaciones de consola.
 Modular y flexible. A diferencia de muchos frameworks que vienen con
multitud de funcionalidades activadas por defecto, el proyecto Katana
tiene como objetivo pequeños componentes centrados en tareas
concretas, dando al programador la elección de cuáles de ellos utilizar.
 Eficiente y escalable. Romper el framework en pequeños componentes
nos da la posibilidad de utilizar sólo los componentes que realmente
necesitamos, incrementando el rendimiento de nuestras aplicaciones.

Arquitectura
Para conseguir esto Katana divide la arquitectura de la aplicación en cuatro
capas lógicas, dando la posibilidad de cambiar un componente en cualquiera de
las capas sin afectar al resto.

Capa Applications
Esta capa no ha cambiado ya que, como hemos comentado, OWIN y Katana no
son un nuevo modelo de programación; simplemente desacoplan los servidores
de los frameworks. Por lo que para realizar nuestras aplicaciones podremos
seguir utilizando todo lo que ya sabíamos
Capa Middleware
Además de desacoplar los frameworks web y los servidores web, OWIN permite
encadenar middleware en una tubería. Un marco web puede interactuar con
OWIN sin saber si está interactuando directamente con el servidor web
subyacente, o con una o más capas de middleware (cada una implementando
OWIN) en la parte superior del servidor web. Esto permite problemas de
infraestructura, como la autenticación, para ser dividido en módulos
separados. Esto es deseable ya que los desacopla del propio código de la
aplicación y los hace reutilizables en todas las aplicaciones. En Project Katana,
Microsoft ha convertido en módulos OWIN varias características de ASP.NET
que anteriormente formaban parte del marco central de ASP.NET. Esto les
permite ser reutilizados en otros marcos web, y también asegura una separación
más limpia de la aplicación que los utiliza.

Aquí podemos ver un ejemplo:

Este middleware se puede añadir fácilmente en la inicialización del pipeline de


OWIN:
Capa Server
El Server es el responsable de empezar y mantener los procesos en los que
corre la aplicación, además de abrir las diferentes conexiones, escuchar las
peticiones y enviarlas al pipeline de OWIN creado por el Host. Actualmente en el
proyecto Katana hay dos implementaciones para esta capa:
• Microsoft.Owin.Host.SystemWeb. Como se ha comentado anteriormente,
IIS actúa tanto de servidor como de Host.
• Microsoft.Owin.Host.HttpListener. Este componente utiliza la clase
HttpListener del Framework .NET para abrir las diferentes conexiones.

Aquí también es donde registraríamos los diferentes componentes que


queramos utilizar en el pipeline, además de los frameworks como WebApi o
SignalR. La clase Startup se llama así por convención y tiene que estar en la raíz
del proyecto, aunque lo podemos cambiar en la configuración de dicho proyecto.

Capa Host
Host: Es responsable de manejar el hilo principal y crear el flujo que seguirán
las peticiones en el pipeline de OWIN. Actualmente en el proyecto Katana hay
tres opciones:
IIS: Instalando el páquete Microsoft.Owin.Host.SystemWeb el pipeline de OWIN
funcionara sobre IIS sin problemas, pero las capas de Host y Server están
ligadas y no podemos sustituir la implementación del Server.
OwinHost.exe: El proyecto Katana ya nos trae un ejecutable que puede
arrancarnos el host desde una aplicación de consola, como si lo hospedáramos
en nuestro propio proceso, pero sin tener que crearlo.
Host personalizado: El proyecto Katana nos permite hospedar nuestras
aplicaciones en nuestro propio proceso, de una manera similar a como se realiza
con Web API.
Uso de OWIN
Aplicación OWIN que corre en IIS

Para esta aplicación, comenzamos creando con Visual Studio una nueva
aplicación Web, a la que llamamos IIS_Owin y seleccionamos la plantilla vacia

Se instala el paquete Microsoft.Owin.Host.SystemWeb, mediante la consola


administradora de paquetes (Package Manager Console), corriendo el
siguiente comando:

Install-Package Microsoft.Owin.Host.SystemWeb -pre

Este comando instala : Microsoft.Owin.Host.SystemWeb 3.0.0-rc2


Este comando, instala también las dependencias Microsoft.Owin 3.0.0-
rc2 y Owin 1.0.
Ahora se crea una clase para configurar nuestra aplicación owin. Para eso,
visual studio 2013 trae una plantilla especial.

Esta plantilla nos crea el esqueleto básico para nuestra clase de configuración:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(IIS_Owin.Startup))]

namespace IIS_Owin
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// For more information on how to configure your application,
// visit http://go.microsoft.com/fwlink/?LinkID=316888
}
}
}

Dentro del método Configuration, reemplazamos los comentarios por:

public void Configuration(IAppBuilder app)


{
app.Run(context =>
{
context.Response.ContentType = "text/html";
return context.Response.WriteAsync("<h1> Hola Mundo!!</h1>");
});
}
Se ejecuta la aplicación y se obtiene lo siguiente:

Aplicación OWIN alojada en una aplicación de consola

Se inicia creando una aplicación de consola que llamaremos Owin_Console


Ahora debemos agregar dos paquetes:
1. Microsoft.Owin.Hosting: que provee la infraestructura para alojar y correr
aplicaciones basadas en OWIN.
2. Microsoft.Owin.Host.HttpListener: servidor Owin, basado en la clase del
NET Framework HttpListener
Para instalar estos paquetes corremos los siguientes comandos en la consola
de comandos de Nuget:

Install-Package Microsoft.Owin.Hosting -pre

Install-Package Microsoft.Owin.Host.HttpListener -pre

Agregamos una clase Startup.cs, utilizando la plantilla OWIN Startup Class y


se edita el método Configuration, reemplazando los comentarios por el
siguiente código:

app.Run(context =>

context.Response.ContentType = "text/html";

return context.Response.WriteAsync("<h1
style='color:red'>OWIN</h1>"+

"<p>Alojamiento de una Aplicación Web en una aplicación Windows...


</p>");

});
Por último, se escribe el código del método Main en el archivo Program.cs,
como se ve a continuación:

static void Main(string[] args)


{
using (WebApp.Start<Startup>("http://localhost:8888"))
{
Console.WriteLine("Escuchando en el puerto 8888...");
Console.WriteLine("Presiona una tecla para detener el
servidor.");
Console.ReadKey(true);
}

Se ejecuta la aplicación y se observa lo siguiente:

Sin detener el servidor, se abre un navegador y se escribe la siguiente URL:

http://localhost:8888

También podría gustarte