SignalR: modificar el tamaño del mensaje.
El uso de Websockets es una excelente opción para comunicación fullduplex entre cliente – servidor, pero, tiene una limitación considerable: el tamaño del mensaje de SignalR.

La tecnología de Websockets funciona sobre los puertos 80 y 443 de HTTP y HTTPS, respectivamente, lo que significa que es totalmente compatible con estos protocolos y tiene la gran ventaja de tener transmisión instantanea sin la necesidad de hacer un PUSH para obtener la respuesta del servidor, y sin tener que esperar la petición del cliente. Esta característica permite mantener intercambio de mensajes en tiempo real que es justo lo que los sitios Web modernos demandan en la actualidad y ahí es donde entra ASP.NET Core SignalR.
Microsoft SignalR es una librería opensource de ASP.NET Core para facilitar la comunicación en tiempo real que utiliza un websocket cuando está disponible, y lo suficientemente inteligente para intercambiar a otro tipo de tecnologías como AJAX cuando el explorador no permite o no emplea websockets. El desarrollador no tiene que preocuparse para implementar con código esa funcionalidad. Es una API que funciona a través de protocolo RPC (Remote Procedure Call) en donde del lado del Servidor se hacen llamadas a funciones JavaScript del lado del cliente en el Explorador.
Sin embargo, SignalR tiene una gran desventaja: el tamaño máximo por defecto de un mensaje es de tan sólo 32Kb. En ocasiones este tamaño no es suficiente para lograr la transferencia sobre TCP de paquetes que requieren enviar imágenes de alta calidad, por ejemplo, o archivos PDF grandes. Afortunadamente, .NET tiene la posibilidad de incrementar el tamaño máximo con lo cual será posible enviar paquetes de mayor tamaño.
Analicemos el ejemplo de un componente Blazor para Editar Texto Enriquecido. El componente incluye la posibilidad de incrustar imágenes en el texto, pero, si la imágen es de alta calidad y mayor de 20Kb, es rechazado por el servidor sin que se pueda lograr el handsh
SignalR tiene hubs para configurar el pipeline de la aplicación y despachar los mensajes automáticamente. Por tal razón, para lograr el objetivo, deberán agregarse las siguientes líneas de código en program.cs para agregar el namespace de SignalR y configurar el hub:
using Microsoft.AspNetCore.SignalR; . . . var builder = WebApplication.CreateBuilder(args); . . . builder.Services.AddServerSideBlazor(); builder.Services.Configure<HubOptions>(options => { options.MaximumReceiveMessageSize = 1024 * 1024; // 1MB or use null });
Con esta modificación al pipeline los mensajes de SignlR no serán cerrados y permitirá su transmisión sin problema. Sin embargo, hay que tomer en cuenta que incrementar la opción MaximumReceiveMessageSize puede incidir de forma negativa en el performance de la comunicación con el servidor. Dependerá, como siempre, del caso de uso.
Suscríbete al Blog
Obtén las últimas noticias en tu correo!Leer siguientes
SignalR: modificar el tamaño del mensaje.
El uso de Websockets es una excelente opción para comunicación fullduplex entre cliente – servidor, pero, tiene una limitación considerable: el tamaño del mensaje de SignalR.