Una pregunta del grupo de noticias de asp.net me dejo pensando sobre la forma de editar un archivo .asp, (si…sin la x al final) estamos hablando de denominado «Classic ASP«, la tecnología del lado del servidor que tanto nos gustaba mezclar código vbcript (a los que nos gustaba el vb) y el html y se nos armaba una hermosa ensalada… aquí bien denominado código spagetti. Usando un poco el #include o componentes ActiveX (que nombre no? parecia de la Guerra de las Galaxias) diseñado por nosotros para funcionalides comunes pero importantes (acceso a datos, reportes, tablas de listados, abm de tablas comunes, etc) nos resultaba mas legible en cuanto a los módulos de cada página, pero igual en proyectos grandes era y es difícil de mantener.
Hasta hoy en día sigo teniendo proyectos que mantener con mis compañeros de trabajo y como esta tarea va de la mano de diseño un poco gráfico, la herramienta ideal era Dreamweaver porque ademas de mantener un diseño en todo el sitio para las modificaciones tanto del ASP como de diseño estetico (CSS, imagenes, peliculas/videos Flash, Templates, etc) y sobre todo de publicar en los servidores de test como de producción con un simple botón, y de mantener esta coherencia en todo este proceso. Es más, en algunas ocaciones solo el notepad o algo que utilizamos mucho Notepad++ era nuestro aliado…
Actualmente en proyectos estamos utilizando VS2005 y porque no utilizar esta formidable IDE para mantener y depurar mis proyectos de ASP Clasico? que buena pregunta. No?
Vamos por parte…
Editar archivos de ASP clásico
Para configurar al VS2005 y editar las extensiones .asp debemos ir a :
- Menu Herramientas,
- luego a Opciones,
- alli en arbol seleccionar Text Editor (si no aparece clickear en el check de Mostrar todas las opciones)
- Hay que agregar la extension asp y seleccionar que siempre sea el Editor el Web Form Editor
Queda algo asi:
Si no lo hacia tenia el mismo efecto pero no se si será por el SP1 del VS2005, pero bueno es conveniente realizar esta configuración
Y que logramos…?
Tenemos color en en el codigo o sea nos esta «destacando la sintaxis» (syntax highlighting) y además
Podemos visualizar las lineas guardadas (por defecto de color verde) y las lineas nuevas sin guardar (color amarillo) esto es propio del VS2005
Podemos tener intellisense en el javascript, pero no es completo ya que no lee los controles del formulario dinamicamente pero eso creo que en el VS «Orcas» ya lo tenemos (todavia no lo probe), pero por lo menos existe la posibilidad de escribir las funciones rápidamente.
Entonces nos queda la tarea de agregar un nuevo proyecto web y apuntar a la carpeta de nuestro repositorio con las paginas ASP clasicas.
Debugeando
Y como podemos utilizar el VS2005 para esta debug?
La idea no es que nos salte un debug cuando en el servidor esta ocurriendo una excepción, esto ya lo hacemos mediante un configuracion en el IIS.
Lo que queremos ahora es igualar el comportamiento de nuestros proyectos en VS2005 que con solo presionar F5 e ir directamente a una ejecución línea por linea con posibilidad de visores de variables.
Para esto no podemos usar el servidor web personal WebDev.WebServer.EXE, porque no ejecuta los scripts ASP o extension .asp, para eso tenemos recurrir a una pequeña y poderosa macro proporcionada por el equipo de debugging del VS Team.
El proceso seria el siguiente:
- Crear una macro para debugear las paginas ASP clasicas
- Correr/Ejecutar las paginas sobre nuestro IIS instalado
- Utilizar nuestro proyecto con ASP Clasico como cualquier otro proyecto web en cuanto al debug
Agregando una macro…
Para ello tendremos que ir a
- Ir el menu Ver
- luego ir a Otras Ventanas
- y alli seleccionar Explorador de Macros
Luego para crear un nuevo proyecto de macro solo seleccionar el boton derecho sobre el item raiz del explorador de Macros
Yo me cree un proyecto que lo llame JoseMacros (bien egocentrico no?), luego hay que crear modulos, alli nuevamente boton derecho y seleccionar Nuevo Modulo
y mi modulo lo bautice como ASPClassicDebug
Para editar la macro….
Visualizamos el Editor de Macros, nada raro de lo venimos acostumbrados
Alli debemos escribir el código de la macro es el siguiente un procedimiento que lo llame RunDebug
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Public Module ASPClassicDebug
Sub RunDebug()
Try
Dim os As System.Version = System.Environment.OSVersion.Version
'Proceso de IIS
'----------------------------------------
'Si el proceso esta sobre IIS6
Dim IISProcess As String = "w3wp.exe"
'Si el proceso esta sobre IIS5 (depende del SO, por ejemplo en WinXP Pro)
If os.Major = 5 And os.Minor < 2 Then
IISProcess = "dllhost.exe"
End If
Dim processFound As Boolean = False
Dim process As EnvDTE80.Process2
For Each process In DTE.Debugger.LocalProcesses
'Buscar el proceso que esta dentro del proceso IIS base
Dim processName As String = process.Name.ToLowerInvariant()
Dim processBaseName As String = System.IO.Path.GetFileName(processName)
If Not processBaseName = IISProcess Then
If Not processBaseName = "inetinfo.exe" Then
Continue For
End If
End If
'Determinar si el proceso contiene a asp.dll
Dim aspLoaded As Boolean = False
Dim diagProcess As System.Diagnostics.Process = System.Diagnostics.Process.GetProcessById(process.ProcessID)
Dim diagModule As System.Diagnostics.ProcessModule
For Each diagModule In diagProcess.Modules
Dim moduleName As String = System.IO.Path.GetFileName(diagModule.FileName).ToLowerInvariant()
If moduleName = "asp.dll" Then
aspLoaded = True
Exit For
End If
Next
'Si el proceso contiene asp.dll entonces nos atachamos a el
If aspLoaded Then
process.Attach2("Script")
processFound = True
End If
Next
If Not processFound Then
MsgBox("No se encuentra el proceso en IIS. Ejecute la pagina que contiene el script ASP entonces el proceso se iniciará.")
End If
Catch ex As System.Exception
MsgBox(ex.Message)
End Try
End Sub
End Module
Pero sinteticamente que es lo que hace?
Bueno escanea los procesos locales para buscar los que pertenecen al IIS y en el cual se utlizado el componente ISAPI asp.dll y lo atachandolo al depurador
Ya tenemos la macro, pero necesitamos correr nuestra aplicacion web con ASP Clásico sobre nuestro IIS, supongo que esto ya lo sabemos configurar pero no tiene mucha historia, básicamente asociamos a nuestro IIS al directorio de nuestra web.
Probamos nuestra aplicacións sobre el IIS, y con esto estamos cargando el componente asp.dll en la primera petición a una página con extension .asp
Y es hora de ejecutar la macro…
Y si colocamos un punto de interrupción…
Tenemos las mismas funcionalidades que un proyecto dentro de nuestro debugger del VS2005.
Podemos observar mediante el Watch de las variables, incluso el tipo de datos que contiene (como ya sabemos en ASP clásico todo es de tipo Variant)
Y tenemos un entorno de desarrollo para nuestras aplicaciones en «Classic ASP» mediante el IDE del VS2005
Y si queremos asociar la macro con una juego de teclas solo basta ir a:
Herramientas >> Opciones >> Teclado
Y asignar alli lo que necesitamos.
Enlaces:
Process2.Attach2 (Método)
Del mismo modo que Attach, hace que el depurador adjunte este proceso, aunque permite especificar un motor o un conjunto de motores.
http://msdn2.microsoft.com/es-es/library/envdte80.process2.attach2(vs.80).aspx
Bueno… espero que les pueda servir de ayuda o guia.
______________________
Jose A. Fernandez