Mostrar una aplicación Web desde un formulario Winform

 Introducción

El proceso de migración de un sistema que tiene muchos años no es tan fácil, mas cuando decidís no desarrollar mas en un determinado lenguaje pero los clientes te piden cosas nuevas, y hay que hacerlas.
La primer versión del producto se hizo en Visual FoxPro. Luego se migró a Winform con Net Framework 4.x y ahora estamos realizando una reingeniería completa del producto en Blazor con Net 7.
Hoy tenemos una gran diferencia con la migración anterior, una aplicación Win es muy diferente a una aplicación Web, pero es un cambio que va a tener muchos beneficios.

Entonces, para que el usuario no tenga que recordad si un proceso sigue en Win o ya esta migrado a Web, determinamos con el cliente que podamos abrir, desde la aplicación Winform, el proceso Web en un formulario.

Comencemos

Después de probar varios componentes desarrollados por terceros, nos encontramos en la versión 7 de Net que hay un nuevo control llamado WebView2.

Aquí podemos encontrar documentación básica para instalar y realizar una primer prueba. En resumen, se instala desde Nuget el componente Microsoft.AspNetCore.Components.WebView.WindowsForms y se agrega el control en el formulario.

Pero vamos directo al código! Si vemos el ejemplo anterior, ahí muestra como utilizar los servicios de Blazor dentro de un proyecto Winform, y hacer ahí mismo una página razor.
Yo lo que necesitaba era simplemente mostrar una Web, que ya estaba implementada en un sitio determinado.

Entonces, solamente agregue en WebView2 a mi formulario y puse el siguiente código:


Yo cree un método, porque luego voy a hacer otras cosas, pero la línea importante es la 13, ahí le establecemos la URL a mostrar.

Bien, si lo ejecutamos, vemos la aplicación corriendo!

                         

















Ahora, como vemos, me surge el inconveniente que al ingresar, me pide usuario y clave, pero yo ya me había autenticado en la aplicación Winform. Entonces me surge la necesidad de pasarle el token de autenticación a la aplicación web, es decir, guardar este token en el local storage para que lo valide y entre directamente sin pedir usuario y clave.

Para esto, encontré el siguiente enlace, que explica como ejecutar código JS, entre otras cosas.

Mi código para poder guardar información en el Local Storage es el siguiente:


Creo dos métodos propios, uno para limpiar el Local Storage y otro para almacenar información. Lo importante es el método ExecuteScriptAsync, éste te permite ejecutar cualquier código JavaScript.

Estos métodos los utilizo en el evento NavigationStarting el cual se ejecuta al navegar hacia la URL indicada. Aquí almaceno los datos que necesito para que mi aplicación saltee el inicio de sesión, y algunas cosas mas que son propias.


Como se ve en la imagen anterior, primero limpio el Local Storage porque, el control WebView guarda la información aunque cerremos y volvamos a abrir la ventana Winform, entonces hago esto para asegurarme que se guarden los datos correctos en mi Local Storage.

Espero que les sea útil! Hasta la próxima!


Comentarios

Entradas populares de este blog

Integration Services y Visual FoxPro Databases

Bases de datos locales en Windows Phone

Agregar proyecto existente al Project Explorer de Eclipse