Saltar al contenido

Comprensión de ASP.NET 5 y .NET Core

ASP.NET 5 es una nueva versión de ASP.NET que se ha creado desde cero teniendo en cuenta el rendimiento, es modular y admite múltiples plataformas como Windows, OSX y Linux. ASP.NET 5 ya no contiene formularios Web Forms, está basado puramente en MVC y es compatible con C # y VB.NET. Este puede ser un punto difícil para algunos. En el futuro, había una gran cantidad de formularios Web Forms transportados y era una abstracción de la web, que no es la forma en que funcionan la mayoría de los marcos modernos. Como tal, MVC 6 es la única opción compatible en ASP.NET 5. Sin embargo, aún puede crear aplicaciones de formularios Web Forms en Visual Studio 2015 (por ejemplo, en .NET 4.6), pero no para ASP.NET 5.

La tecnología WebAPI (que se lanzó con MVC 4) ahora se ha fusionado en un modelo de controlador unificado en ASP.NET 5. ASP.NET 5 ahora tiene soporte listo para usar para la inyección de dependencia sin la necesidad de contenedores DI de terceros ( aunque varios de los principales funcionan con él si ese es su caso de uso), y un rendimiento que puede cumplir o superar las aplicaciones de NodeJS. No olvidemos el alojamiento propio (que se ejecuta sin instalar en un servidor web) también en todas las plataformas compatibles y, por supuesto, puede alojar en IIS. Puede estar en funcionamiento con el autohospedaje de una API RESTful en minutos, publicar en Azure y admitir a millones de usuarios, o alojar en su servidor web.

ASP.NET 5 tiene un diseño modular para que solo ejecute los componentes que necesita en su aplicación. Las versiones anteriores de ASP.NET tenían bibliotecas de carga de sobrecarga importantes que es posible que nunca se hayan utilizado. La huella de memoria de ASP.NET 5 es significativamente más pequeña y ahora realmente puede ejecutar su aplicación junto con múltiples versiones de .NET y su código de aplicación.

Como se indica en el sitio web

  • Nueva canalización de solicitudes HTTP modular y liviana
  • Capacidad para alojar en IIS o autohospedar en su propio proceso
  • Construido sobre .NET Core, que admite el verdadero control de versiones de aplicaciones en paralelo
  • Se envía completamente como paquetes NuGet
  • Soporte integrado para crear y usar paquetes NuGet
  • Pila web de alineación única para la interfaz de usuario web y las API web
  • Configuración basada en el entorno lista para la nube
  • Soporte incorporado para inyección de dependencia
  • Nuevas herramientas que simplifican el desarrollo web moderno
  • Cree y ejecute aplicaciones ASP.NET multiplataforma en Windows, Mac y Linux
  • Código abierto y centrado en la comunidad

ASP.NET 5 ahora es RC (Release Candidate), lo que significa que obtendrá soporte para él en producción, aunque se esperan algunos cambios adicionales.

¿En qué se ejecuta ASP.NET 5?

ASP.NET 5 se ejecuta en Contenedores Windows, OSX, Linux e incluso Docker. Eso cargas debajo.NET 4.5+, .NET 4.6, Mono y .NET Core (más sobre esto más adelante).

Como nota al margen, hay algunos cambios futuros interesantes que se están gestando aquí para determinar qué define el sistema .NET en el que se ejecutará su aplicación, y ese es el .NET Platform Standard, que define un conjunto mínimo de clases base necesarias para ejecutar su aplicación. es algo a tener en cuenta, ya que cambia la forma en que nuestras aplicaciones se referirán a .NET para ejecutarse.

Empezando

Primero necesita los bits para ASP.NET 5 que puede recuperar de http://get.asp.net. Puede utilizar todos sus editores de código favoritos para crear aplicaciones ASP.NET 5. Mi preferencia es Visual Studio 2015 o Visual Studio Code, ya que tiene todas las herramientas para comprender mejor sus aplicaciones, pero es bastante trivial hacer esto con Sublime, Notepad, Brackets, etc.

A continuación, cree una aplicación. Tienes un par de opciones aquí. El primero es en Visual Studio, haz un Archivo-Nuevo Proyecto-> Web, selecciona Aplicación Web ASP.NET. Esto abre un nuevo cuadro de diálogo donde puede seleccionar la plantilla .NET 4.6.1 para One ASP.NET (IE usando MVC, Web API y Web Forms, todo en un proyecto) que quiero enfatizar que no es ASP.NET 5. Debe seleccionar uno de los proyectos ASP.NET 5 de la sección ASP.NET 5 (tiene sentido, ¿verdad?).

Hacendado

Si te gusta usar Yeoman (¿no tienes idea de qué es Yeoman? Mira nuestro video gratuito aquí en Microsoft Virtual Academy) puedes usar el generador Yeoman para ASP.NET 5. Esto generará el código de tu proyecto base por ti. Los comandos (asumiendo que tiene NPM instalado instalando NodeJS) son simplemente:

npm install -g yo
npm install -g generator-aspnet
yo aspnet

Eso generará su proyecto y simplemente puede hacer clic derecho en esa carpeta generada y abrir en Visual Studio Code para ver su proyecto completo. De hecho, ya hay un gran artículo sobre este flujo de trabajo ASP.NET 5 de Visual Studio Code, así que no lo repetiré aquí.

Project.json y los tres comandos

Hay tres comandos que se utilizan para administrar su proyecto ASP.NET 5. O los ejecuta desde la línea de comando o su IDE como Visual Studio los ejecuta por usted. Me gusta entender lo que sucede detrás de escena, así que profundicemos un poco en eso.

DNVM – Este es el Administrador de versiones de .NET. Este es el trabajo de utilidades para instalar los tiempos de ejecución para que los use su aplicación ASP.NET 5. Puede tener varias versiones en tiempo de ejecución al mismo tiempo.

DNX – Sus aplicaciones ASP.NET 5 se inician a través del ejecutable DNX. DNX es el host para _todas_ sus aplicaciones ASP.NET 5, ya sea una aplicación de consola o que se ejecuta dentro de IIS. Incluso si es transparente para usted, detrás de escena DNX está ejecutando su aplicación. Si recuerda esto, la vida será más fácil. DNX es el programa de arranque, el sistema de compilación, las utilidades y más para ejecutar ASP.NET 5 en una variedad de versiones en tiempo de ejecución como .NET 4.5.1, .NET 4.6, .NET Core y Mono.

Si miramos la clase Startup.cs generada en una plantilla Archivo-> Nuevo proyecto podemos ver el siguiente método Configurar:

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();

if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
//..
}

La DNX runtime en realidad es responsable de inyectar IApplicationBuild, IHostingEnvironment e ILoggerFactory en su aplicación. Te estás comunicando con DNX aquí. Esto es bastante diferente de lo que estamos acostumbrados con las aplicaciones .NET estándar.

DNX realmente tiene cuatro capas para su ejecución
1. Inicie CLR para la versión que haya especificado o predeterminada, es decir, .NET completo, CoreCLR, etc.
2. Cree el LoaderContainer y los cargadores IL (estos resuelven sus ensamblajes)
3. Resuelva ensamblados en project.json y llame al punto de entrada en su código administrado
4. El código de su aplicación se ejecuta

Como puede ver a estas alturas, DNX es el ejecutable más importante en este proceso.

DNU – Utilidades .NET. Sí, es un nombre genérico, pero piense en esto como su herramienta múltiple para instalar paquetes (es decir, NuGet), crear su aplicación o publicar su aplicación. No hay packages.config en sus proyectos ASP.NET 5, solo project.json.

El archivo project.json es el archivo más importante de su proyecto. Define la versión en tiempo de ejecución que necesitará para ejecutar su aplicación. También especifica las dependencias para sus aplicaciones: paquetes de IE NuGet que deberán restaurarse antes de que su proyecto se ejecute por primera vez.

Veamos una parte de un archivo project.json con solo las partes que quiero discutir aquí que se muestran a continuación. La sección de dependencias son paquetes NuGet de los que depende su aplicación. Visual Studio los restaurará automáticamente.

{
"dependencies": {
"Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions" : "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final"
},

"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
},

"frameworks": {
"dnx451":{},

"dnxcore50": {}
}
}

Visual Studio Code también le pedirá que restaure estos paquetes.
Detrás de escena, tanto VS como VS Code simplemente usan el comando:

dnu restore

Este comando extrae los paquetes de la fuente NuGet, que simplemente los extrae de los servidores NuGet y los almacena en caché localmente, por ejemplo. c: usuarios .dnx
Si está utilizando la línea de comando (lo que utilizan las dos opciones anteriores entre bastidores), simplemente puede ejecutar la restauración de dnu en la carpeta raíz de su proyecto.

Quiero enfatizar que estos comandos sucederán. automáticamente en Visual Studio cuando crea / ejecuta su proyecto. Solo necesita conocer estos comandos si desea trabajar en la línea de comandos, por ejemplo. si está trabajando en Linux.

La ejecución de su aplicación ocurre a través de varios métodos. Publicación que cubriré en una publicación futura. Desde Visual Studio, simplemente haga clic en el botón IIS Express y ya habrá configurado IIS Express para admitir esto a través de un HttpPlatformHandler, que es un módulo de back-end que inicia procesos que escuchan en puertos HTTP y envía solicitudes de proxy en IIS. Esto tendrá más sentido en un segundo.

¿Ves esas otras opciones arriba que dicen ‘web’ y ‘ef’? Esos son comandos. Los comandos son algo completamente nuevo en ASP.NET 5, son simplemente una forma de tener múltiples formas de cargar su aplicación o realizar acciones en ella. En el ejemplo anterior, podemos ejecutar IIS Express. Si hacemos clic en ‘web’, esto iniciará Kestrel (aunque todavía a través de DNX) para que actúe como un servidor web ligero para ejecutar su aplicación. Si queremos generar código para que Entity Framework cree nuestra base de datos para nosotros, podemos usar el comando ‘ef’ para llamar a las migraciones Code-First de Entity Framework para ASP.NET 5. Por cierto, si no tiene idea sobre el poder de EF Migraciones de Code-First, consulte nuestro curso gratuito de Microsoft Virtual Academy sobre Entity Framework, específicamente el Módulo 4.

¿Qué sucede detrás de escena cuando todo esto sucede? Es bastante simple.

dnx web

Eso es todo 🙂 Si el comando se llamara ‘MyWebServer’ en lugar de ‘web’, entonces, por supuesto, sería dnx mywebserver.

¿Qué es .NET Core?

.NET Core es un nuevo .NET de código abierto ligero que consta de dos componentes, CoreCLR, que es esencialmente el tiempo de ejecución, y CoreFX, que son las bibliotecas adicionales como IO, Colecciones, etc. que usaría en sus aplicaciones. La principal diferencia aquí es que es un mecanismo de tracción. Comienza con un marco muy ligero y trae los módulos que necesita a través de paquetes NuGet. Así es como se configuran las plantillas ASP.NET 5 listas para usar.

Puede ejecutar ASP.NET 5 en el marco .NET completo. Sin embargo, hay equipaje allí. Se cargan muchas bibliotecas adicionales que probablemente no necesite.

Mirando hacia atrás en el archivo project.json, puede ver el elemento frameworks. Esto definirá en qué marcos compatibles se ejecutará esta aplicación. Aquí vemos dnx451 (es decir, soporte DNX para .NET Framework 4.5.1 COMPLETO) y dnxcore50, la versión ligera.

Tiene la capacidad de iniciar desde Visual Studio y especificar el marco predeterminado para cargar en las propiedades de su proyecto.

Al leer sobre .NET Core, encontrará varias formas de ejecutar esto que son exclusivas entre sí. Hay una utilidad dotnet si desea compilar o ejecutar una aplicación .NET Core (la interfaz de línea de comandos también admite otras operaciones) disponible en https://github.com/dotnet/cli. Sin embargo, cuando se trata de ASP.NET 5, los bits de .NET Core se cargan a través de la utilidad DNX. DNX le permite especificar con qué tiempo de ejecución está iniciando la aplicación a través de:

dnx --framework dnx451 web

Tiene la flexibilidad de elegir en qué marco se va a ejecutar. Marc Gravell de la fama de Stack Overflow tiene una buena serie sobre el cambio a DNX llamada The Road to DNX, ya que hay cambios definitivos en la API si ha estado acostumbrado a desarrollar en .NET completo (por ejemplo, .NET 4.5) y pasar a .NET Centro.

Entrega de contenido

ASP.NET 5 está desacoplado de una implementación de servidor web. DNX se queda sin proceso y actualmente tiene soporte para IIS y el servidor web de código abierto. Anteriormente, WebListener era una opción, pero se eliminó para RC ya que el movimiento es hacia el uso de Kestrel para autohospedarse. Si está ejecutando multiplataforma, el servidor web / proxy nginx se puede usar para enviar solicitudes de proxy a Kestrel, al igual que HttpPlatformHandler lo hace para IIS. para ser claros, IIS aloja DNX (a través de HttpPlatformHandler), al igual que Kestrel también aloja DNX. Vea la imagen a continuación, observe cómo en cada caso, Kestrel es el host para escuchar el tráfico HTTP. El servidor web simplemente envía el tráfico a él, ya sea IIS o NGinx.

Hablamos sobre el archivo project.json, que es un cambio de las versiones anteriores de MVC, pero también es importante tener en cuenta que los proyectos ASP.NET 5 ofrecerán contenido estático de forma predeterminada solo desde la carpeta wwwroot. Las vistas y los controladores funcionan de la misma manera que lo hacían anteriormente (si no está familiarizado con eso, publicaré un video en breve sobre este proceso).

Terminando

Hay mucho más en que profundizar, esta fue una descripción general de alto nivel de las diferencias que ASP.NET 5 trae a la mesa. Estén atentos para más publicaciones sobre los detalles de nivel inferior, ejecución / alojamiento de procesos y más.

Sígueme en Twitter para estar atento a las actualizaciones, trato de publicar solo cosas útiles 🙂

¡Disfrutar!