4:21 0 0
HttpContext NULL Blazor Server App

HttpContext NULL Blazor Server App

  DrUalcman |  enero 172022

Bueno, hoy volvemos a las andadas con cosas que me han pasado y a ver si conseguimos ayudar a alguien. Si tienes una aplicacion Blazor Server y necesitas obtener acceso al contexto lo más normal es hacer una injección del objeto HttpContext, pero en ocasiones este objeto no esta accesible directamente, por lo que necesitamos hacer uso del interfaz IHttpContextAccesor. Esta interfaz la utilizaremos cuando estamos inicializando los servicios, por ejemplo.

Pero en ocasiones, es muy posible, que tanto el IHttpContextAccesor como el HttpContext sean nulos. Es más, si desde IHttpContextAcceso no consigues nada, de seguro que el HttpContext será nulo. 

Esto suele pasar cuando la aplicación la subimos o la publicamos en un servidor basado en Internet Information Server, (IIS) pero no nos pasa cuando lo estamos ejecutando en nuestro entorno de desarrollo local. Y cuando esto ocurre es cuando uno se comienza a volver loco. Bues bién, aquí la solucición a todos tus problemas, y la verdad que es más sencilla de lo que parece.

Cuando estamos trabajando en modo desarrollo, se puede decir, que todos los servicios de IIS están a nuestro alcance, pero cuando estás en un entorno de producción te debes de asegurar que todos los servicios están bien instalados y operativos, y ¿cuál es el servicio que, por defecto, no está instalado en nuestro servidor IIS? Bien, el servicio que te debes de asegurar que está instalado es el de los WebSockets.

De hecho, si abres la consola del navegador, si no está habilitado el servidor de WebSockets podrás ver como el framework de Blazor está haciendo unas 3 a 5 llamas a un end point un tanto extraño, y que desde luego, no es de tu API o de tu aplicativo. En cuando habilitas los servicios de WebSockets estas llamadas desaparecen por arte de magia.

¿Cuando me pasó esto? pues resulta que el serviodr IIS de la empresa se calló y se reinstaló desde cero. Entonces el IIS se instaló con lo básico para poder ejecutar aplicaciones web ASP y poco más, uno pensó, cuantos menos servicios mejor, así irá más fluido. Pero al final el tiro salió por la culata, ya que los aplicavios Blazor Server empezaron a hacer cosas raras, como por ejemplo todos los que dependian del contexto para recoger el nomber de usuario que había inicado sesión, los permisos y otras pequeñas funciones. Esto es porque Blazor est'a basado en SinglR y 'este servicio depende de los WebSockets para hacer su trabajo.

Nosotros utilizamos, dentro de páginas MVC, pequeños aplications de blazor, que trabajan tanto en Blazor WebAssembly como en estas páginas MVC haciendolos trabajar como Blazor Server. Así que después de una par de horas, la verdad que no costó mucho encontrar la solución, me di cuenta que el error no podía estar en el código y me puse a pensar en que había cambiado del lador del servidor, revisando me di cuenta del tema del WebSockets, y además para confirmar encontré un hilo en StackOverflow que habla de ese tema.

Y listo amigos, esta es la expetiencia que os quetía compartir hoy, no ncesita mostrar código ya que no tiene nada que ver con código realmente, ni tengo campturas de panalla ya que no se me ocurrió en el momento, lo siento, para la próxima intentaré ser más previsor, ya que luego se me ocurre hacer el blog para conpartiros mi experiencia.

0 Comentarios

 
 
 

Archivo