mariano rajoy hololens
Mariano Rajoy se prueba las HoloLens de Kabel
17 febrero, 2017
Powell 365 Kabel
Cree una Intranet colaborativa en 5 etapas con Powell 365
1 marzo, 2017

Este artículo pretende servir de introducción conceptual a ASP.NET Core, con una pequeña focalización en el request pipeline entre el servidor web http y la aplicación ASP.NET Core.

  • ASP.NET Core es un framework open-source. Podéis encontrar el código fuente en GitHub.
  • ASP.NET Core es cross-platform. Las aplicaciones ASP.NET Core se pueden desarrollar y ejecutar en entornos Windows, Mac y Linux.
  • ASP.NET Core está diseñado para desarrollar aplicaciones modernas conectadas a Internet. Permite ser desplegado tanto en Cloud como en on-premise, y soporta .NET Core y .NET framework.
  • ASP.NET Core es un rediseño simplificado de ASP.NET. Este nuevo framework se ha modularizado en pequeños servicios/funcionalidades encapsuladas en paquetes NuGet. De esta forma, se nos ofrece mucha flexibilidad a la hora de construir nuestras aplicaciones, ya que podemos añadir únicamente los servicios/funcionalidades que vayamos a necesitar.

Reduciéndolo conceptualmente al mínimo, podemos decir que ASP.NET Core es simplemente una aplicación de consola, un ejecutable .exe que crea un servidor web http en el método Main.

 

Al crear un nuevo proyecto en Visual Studio con la plantilla para aplicaciones web ASP.NET Core (.NET Framework), se nos genera la siguiente solución:

img03

Si entramos a ver la clase Program.cs:

img02

Vemos que Visual Studio automáticamente nos ha generado las pocas líneas necesarias para crear el servidor web http, configurar algunas características del servidor y ‘levantarlo’.

En primer lugar, vemos que el host de la aplicación se crea a partir de la clase WebHostBuilder siguiendo el patrón builder que, a grosso modo, consiste en centralizar en un único punto la instancia de un objeto complejo y la configuración de sus características.

Con el host creado, vemos la definición del servidor que se implementará. Por defecto se utiliza Kestrel, y será la que veamos. A saber que Kestrel es un servidor HTTP cross-platform basado en libuv, que es una librería de operaciones I/O asíncronas.

Si nuestra aplicación web va a dar servicio únicamente a redes internas, podemos exponer el servidor HTTP Kestrel tal que así:

img04

Si, por el contrario, nuestra aplicación web va a dar servicio en Internet, se recomienda utilizar un reverse proxy server entre nuestro servidor e Internet, ya que, al ser relativamente nuevo, no cuenta con todas las medidas de seguridad necesarias, aunque incluye las medidas de seguridad básicas.

De esta forma, nos quedaría así:

img01

El método UseStartup especifica la clase de inicio de la aplicación. Por defecto, vemos que se especifica la clase Startup, la cual nos ha creado el VisualStudio automáticamente al crear el proyecto.

La clase Startup.cs configura el request pipeline que manejará todas las peticiones entre el servidor y la aplicación. La clase de inicio tiene que tener un método llamado Configure que será invocado al iniciarse la aplicación y será donde se configure el pipeline. 

El request pipeline es una secuencia de componentes de software que se van a ir ejecutando sobre la request y sobre la response de manera secuencial. Cada uno de estos componentes recibe el nombre de middleware y cada uno de ellos es responsable de continuar con la secuencia del pipeline o cortarla. Por este motivo es muy importante el orden en el que configuremos los componentes del pipeline. Por ejemplo, podemos añadir un componente middleware que se encargue de autenticar la request y, en función del resultado de la autenticación, pasar al siguiente componente middleware o cortar en ese punto la ejecución y devolver un error 401: Unauthorized.

El flujo de ejecución que lleva el pipeline es el siguiente:

img05

Los componentes middleware que configuremos en el pipeline pueden ser los ofrecidos por el framework o ser componentes creados por nosotros mismos.

Los siguientes componentes middleware son ofrecidos por el framework:

Crear un custom middleware es algo muy sencillo. Simplemente tenemos que crear una clase pública que reciba en el constructor un objeto RequestDelegate que nos permita invocar al siguiente componente del pipeline y exponer un método público y asíncrono llamado Invoke que reciba el contexto de la petición para que nos puedan llamar desde el pipeline.

Un ejemplo de custom middleware podría ser el que se expone a continuación:

img06

Nos puede resultar útil crear nuestros propios componentes cuando necesitemos añadir cierta funcionalidad, cambiar el comportamiento de alguno de los componentes que nos ofrece el framework, o necesitemos hacer algo que ningún componente nos ofrece.

 

 

Si queréis comentarnos lo que sea podéis hacerlo en info@kabel.es.

También podéis seguirnos en Twitter y LinkedIn.

 

Kabel Geek


 

Compártelo: Share on FacebookTweet about this on TwitterShare on LinkedInPin on Pinterest

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

NEWSLETTER