Modelos de hospedaje de aplicaciones Blazor
Sugerencia
Este contenido es un extracto del libro electrónico "Blazor for ASP.NET Web Forms Developers for Azure" (Blazor para desarrolladores de ASP.NET Web Forms), disponible en Documentación de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.
Las aplicaciones Blazor se pueden hospedar de una de las siguientes maneras:
- En el lado cliente en el explorador en WebAssembly.
- En el lado servidor en una aplicación ASP.NET Core.
Aplicaciones de BlazorWebAssembly
Las aplicaciones de BlazorWebAssembly se ejecutan directamente en el navegador en un entorno de ejecución de .NET basado en WebAssembly. Las aplicaciones de BlazorWebAssembly funcionan de manera similar a los marcos de JavaScript de front-end, como Angular o React. Pero en lugar de escribir JavaScript, se escribe C#. El entorno de ejecución de .NET se descarga con la aplicación junto con el ensamblado de la aplicación y las dependencias necesarias. No se necesitan complementos ni extensiones del explorador.
Los ensamblados descargados son ensamblados .NET normales, como los que se usarían en cualquier otra aplicación .NET. Como el entorno de ejecución admite .NET Standard, puede usar las bibliotecas existentes de .NET Standard con la aplicación de BlazorWebAssembly. Pero estos ensamblados se seguirán ejecutando en el espacio aislado de seguridad del explorador. Algunas funciones pueden iniciar una excepción PlatformNotSupportedException, por ejemplo al intentar acceder al sistema de archivos o abrir conexiones de red arbitrarias.
Cuando se carga la aplicación, se inicia el entorno de ejecución de .NET y se apunta al ensamblado de la aplicación. Se ejecuta la lógica de inicio de la aplicación y se representan los componentes raíz. Blazor calcula las actualizaciones de la interfaz de usuario en función de la salida representada de los componentes. Después se aplican las actualizaciones del DOM.
Las aplicaciones de BlazorWebAssembly se ejecutan exclusivamente en el lado del cliente. Estas aplicaciones se pueden implementar en soluciones de hospedaje de sitios estáticos, como GitHub Pages o el hospedaje de sitios web estáticos de Azure. .NET no es necesario en el servidor. Para la vinculación en profundidad a elementos de la aplicación normalmente se necesita una solución de enrutamiento en el servidor. La solución de enrutamiento redirige las solicitudes a la raíz de la aplicación. Por ejemplo, este redireccionamiento se puede controlar mediante reglas de reescritura de URL en IIS.
Para obtener todas las ventajas de Blazor y el desarrollo web de .NET de pila completa, hospede la aplicación de BlazorWebAssembly con ASP.NET Core. Al usar .NET en el cliente y el servidor, puede compartir código fácilmente y compilar la aplicación con un conjunto coherente de lenguajes, marcos y herramientas. Blazor proporciona plantillas útiles para configurar una solución que contiene una aplicación de BlazorWebAssembly y un proyecto de host de ASP.NET Core. Cuando se compila la solución, los archivos estáticos compilados de la aplicación Blazor se hospedan en la aplicación de ASP.NET Core con el enrutamiento de reserva ya configurado.
Aplicaciones Blazor Server
Recordará de la descripción de la arquitectura de Blazor que los componentes de Blazor representan su salida en una abstracción intermedia denominada RenderTree
. Después, el marco Blazor compara lo que se representa con lo que se ha representado antes. Las diferencias se aplican al DOM. Los componentes de Blazor se desacoplan de la forma de aplicar la salida representada. Por tanto, los propios componentes no tienen que ejecutarse en el mismo proceso que actualiza la interfaz de usuario. De hecho, ni siquiera se tienen que ejecutar en la misma máquina.
En las aplicaciones Blazor Server, los componentes se ejecutan en el servidor en lugar de en el lado cliente en el explorador. Los eventos de interfaz de usuario que se producen en el explorador se envían al servidor por medio de una conexión en tiempo real. Los eventos se envían a las instancias de componente correctas. Los componentes se representan y la diferencia de interfaz de usuario calculada se serializa y se envía al explorador donde se aplica al DOM.
El modelo de hospedaje de Blazor Server puede resultarle familiar si ha usado ASP.NET AJAX y el control UpdatePanel. El control UpdatePanel
administra la aplicación de actualizaciones parciales de página en respuesta a eventos desencadenados en la página. Cuando se desencadena, UpdatePanel
solicita una actualización parcial y, después, la aplica sin necesidad de actualizar la página. El estado de la interfaz de usuario se administra mediante ViewState
. Las aplicaciones Blazor Server son ligeramente diferentes, ya que la aplicación necesita una conexión activa con el cliente. Además, todo el estado de la interfaz de usuario se mantiene en el servidor. Aparte de estas diferencias, los dos modelos son conceptualmente similares.
Procedimiento para elegir el modelo de hospedaje de Blazor adecuado
Como se describe en la documentación del modelo de hospedaje de Blazor, los distintos modelos de hospedaje de Blazor tienen diferentes inconvenientes.
El modelo de hospedaje de BlazorWebAssembly ofrece las siguientes ventajas:
- No hay ninguna dependencia del lado servidor .NET. La aplicación funciona totalmente después de descargarla en el cliente.
- Los recursos y capacidades del cliente se aprovechan completamente.
- El trabajo se descarga del servidor al cliente.
- No es necesario un servidor web ASP.NET Core para hospedar la aplicación. Los escenarios de implementación sin servidor son posibles (por ejemplo, para servir a la aplicación desde una red CDN).
Las desventajas del modelo de hospedaje de BlazorWebAssembly son estas:
- Las funcionalidades del explorador limitan la aplicación.
- Se necesita hardware y software cliente compatible (por ejemplo, con WebAssembly).
- El tamaño de descarga es mayor y las aplicaciones tardan más tiempo en cargarse.
- La compatibilidad con las herramientas y el tiempo de ejecución de .NET está menos desarrollada. Por ejemplo, existen limitaciones en la compatibilidad y la depuración de .NET Standard.
Por el contrario, el modelo de hospedaje de Blazor Server ofrece las ventajas siguientes:
- El tamaño de la descarga es mucho menor que una aplicación del lado cliente y la aplicación se carga mucho más rápido.
- La aplicación aprovecha al máximo las funciones del servidor, incluido el uso de las API compatibles con .NET.
- En el servidor, .NET se usa para ejecutar la aplicación, por lo que las herramientas de .NET existentes, como la depuración, funcionan según lo previsto.
- Se admiten clientes ligeros. Por ejemplo, las aplicaciones del lado servidor funcionan con exploradores que no admiten WebAssembly y en dispositivos con restricción de recursos.
- La base del código de la aplicación .NET/C#, incluido el código de componente de la aplicación, no se sirve a los clientes.
Las desventajas del modelo de hospedaje de Blazor Server son las siguientes:
- Mayor latencia de la interfaz de usuario. Cada interacción del usuario implica un salto de red.
- No hay soporte técnico sin conexión. Si se produce un error en la conexión del cliente, la aplicación deja de funcionar.
- En el caso de aplicaciones con muchos usuarios, la escalabilidad supone un reto. El servidor debe administrar varias conexiones de cliente y controlar el estado del cliente.
- Se necesita un servidor ASP.NET Core para atender la aplicación. No se permiten escenarios de implementación sin servidor. Por ejemplo, no se puede ofrecer la aplicación desde una red CDN.
La lista anterior de ventajas e inconvenientes puede intimidarle, pero el modelo de hospedaje se puede cambiar más adelante. Con independencia del modelo de hospedaje de Blazor seleccionado, el modelo de componentes es el mismo. En principio, se pueden usar los mismos componentes con cualquiera de los modelos de hospedaje. El código de la aplicación no cambia; pero se recomienda introducir abstracciones para que los componentes sigan siendo independientes del modelo. Las abstracciones permiten a la aplicación adoptar más fácilmente otro modelo de hospedaje.
Implementación de la aplicación
Las aplicaciones de ASP.NET Web Forms normalmente se hospedan en IIS en un clúster o una máquina con Windows Server. Las aplicaciones Blazor también:
- Se pueden hospedar en IIS, ya sea como archivos estáticos o como una aplicación de ASP.NET Core.
- Pueden aprovechar la flexibilidad de ASP.NET Core para hospedarse en varias plataformas e infraestructuras de servidor. Por ejemplo, puede hospedar una aplicación Blazor con Nginx o Apache en Linux. Para más información sobre cómo publicar e implementar aplicaciones de Blazor, consulte la documentación de Hospedaje e implementación de Blazor.
En la siguiente sección, se describirá cómo se configuran los proyectos para aplicaciones de BlazorWebAssembly y Blazor Server.