En el Instituto donde laboro se tiene un formato que lleva años usando y que parece que ya, al no tener versiones de 64bits y Microsoft concluir su desarrollo, se está cambiando por formatos de texto como el CSV, sin embargo debido a los sistemas heredadas que aun no se aun podido migrar se tiene aun versiones de archivos de lenguajes XBase (DBF).
Se pretende migrar este tipo de formato a CSV para después subir a una base de datos de Oracle. En principio al hacer que los archivos dbf se podían leer desde aplicaciones .NET de consola no se tuvo problema, por lo que, auguramos el éxito de este mismo caso de uso en aplicaciones web.
No fue así, y esto nos costó todo un día de buscar la solución, que hasta ahora solo se ha podido resolver en el Servidor Web (el Internet Information Services) de nuestras máquinas locales, pero es importante también darle salida, en el IIS Express del propio VS2022.
La solución se expresa en texto y en este artículo se detallará un poco más la misma. Como siempre la web te saca de varios apuros sin duda alguna y esta vez la solución vino de <lwp> Comunidad de Programadores.
El error que desplegaba el sitio web era lo siguiente:
Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.
Detalles de la excepción: System.InvalidOperationException: El proveedor 'vfpoledb' no está registrado en el equipo local.
Pues bien, se trato de instalar el OleDb Provider de FoxPro, una solución marcaba que se instalará el Power BI Desktop, el Service Pack de Visual FoxPro, en fin muchas soluciones que al final al leer cuidadosamente dicha página, menciona que la solución aplicaba hasta VS 2019.
Entonces empezamos de cero e hicimos una aplicación web con un botón y una etiqueta, se definió la arquitectura x86 y se agregaron las instrucciones directamente (utilizamos bibliotecas de clases) de OleDb y la estrategia era desplegar esta aplicación ultra sencilla en el IIS local.
Para definir la plataforma a trabajar (equipos de 32 o 64 bits) se elige la opción Proyecto - Propiedades del <AppWeb> donde en la pestaña Compilar en el combo Plataforma destino, se elige x86.
Después de esto procedimos a Publicar esta pequeña aplicación que hacía un comando SELECT COUNT(*) FROM TablaDbf para saber cuantos registros tiene la tabla de FoxPro, el método fue usar el resultado de dicha publicación a una carpeta, misma que sería copiada al wwwroot de nuestra máquina que funge como servidor.
Ahora vamos a nuestra consola del IIS para permitir que se desplieguen aplicaciones de 32 bits como es este caso, ya que es lógico que como mencioné la dll del OleDb (vfpoledb.dll) es una versión de este tipo ya que Microsoft ya no actualizó el producto a 64bits.
Elegimos primero en el panel izquierdo Grupo de Aplicaciones, luego DefaultAppPool y por último Configuración avanzada.
Aquí es donde se activa que sea posible la ejecución de aplicaciones de 32 bits. Por seguridad al copiar la aplicación al directorio por omisión se detenía el servicio del IIS y luego se inicia para probar los cambios.
Para cerrar la pinza ahora se hizo lo mismo pero usando nuestro kit de clases y sigue funcionando. Otra moraleja es que en la desesperación baje la WebApp hasta el FrameWork 2.0 y al querer incorporar las bibliotecas compiladas con Framework 4.8 y marcaba errores en la compilación, se solucionó al dejar la WebApp con 4.8.
Hasta aquí el post de hoy, y pues quizás ayude a otro hermano programador que sufra lo mismo que sufrimos entre ayer y hoy.
Miguel Araujo.
No hay comentarios:
Publicar un comentario