Editar ASP Clasico con VS2005… y depurarlo

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 :

  1. Menu Herramientas,
  2. luego a Opciones,
  3. alli en arbol seleccionar Text Editor (si no aparece clickear en el check de Mostrar todas las opciones)
  4. 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:

  1. Crear una macro para debugear las paginas ASP clasicas
  2. Correr/Ejecutar las paginas sobre nuestro IIS instalado
  3. Utilizar nuestro proyecto con ASP Clasico como cualquier otro proyecto web en cuanto al debug

Agregando una macro…

 Para ello tendremos que ir a

  1. Ir el menu Ver
  2. luego ir a Otras Ventanas
  3. 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

18 comentarios sobre “Editar ASP Clasico con VS2005… y depurarlo”

  1. Muy buen consejo Jose A.

    Yo para editar ASP clásico uso el editor de scripts que viene con todas las versiones de Office (al enos desde la 97) y que hace todo eso y más (incluso Intellisense de las clases propias que declares y de las que instancies con Server.CreateObject, además de Intellisenes de ASP y javaScript). Por supuesto soporta depuración avanzada tanto de ASP como de JavaScript.
    Es una virguería y está muy oculto por lo que poca gente lo conoce, pero merece mucho la pena.

    Para localizarlo deberás haber instalado todo el nodo que se refiere a «Editor de secuencias de comandos de Microsoft» dentro del grupo de «Herramientas de Office». Puedes agregarlo si no lo has hecho ya.

    Luego, sólo tienes que localizar el ejecutable porque no hay ningún acceso directo.

    En el caso de Office 2003 está en:
    «C:Program FilesMicrosoft OfficeOFFICE11MSE7.exe»

    Por desgracia lo smuy desgraciados lo han quitado de Office 2007, así que imagino que se podrá copiar y utilizar desde Office 2003 y listo (no lo he intentado porque hace mucho que no programao en ASP clásico).

    No es un producto perfecto pero te puede ahorrar muchos dolores de cabeza 🙂

    Y por cierto, Jose A., ¡bienvenido a Geeks!

  2. Hola José M. 😉
    Gracias por tus comentarios, …
    con respecto a MSE lo conozco el Microsoft Script Editor, que es el Editor de secuencias de comandos de Microsoft, que cuando estaba en una maquina con IIS y con depuracion del servidor configurada en el website correspondiente saltaba la ventana con opcion de depurarla aqui, claro necesitaba tener instalada esta herramienta (o sea el Office).
    Pero como te decia no se llevaba de la mano con el diseño estetico del sitio, solo utilizaba para algun que otro problema.
    Llevando solo el .exe a otra maquina tampoco lo probe pero seguro que faltaria algo

    Con respecto al actual version del VS tiene algo que me saltaba en excepcion, un Debugeador JIT (Just in Time) y era el propio VS2005 y queria poder obtener este beneficio, por asi decirlo, sin tener que esperar a las excepciones, entonces me dedique a buscar como hacerlo.

    Nuevamente gracias por tu comentario.

  3. Hola José,

    estuve probando de añadir la extensión asp en VS2008 y asociarle el Web Form Editor, pero no me hace «Syntax HighLighting».

    ¿Tienes alguna idea de como solucionarlo?

    Excelente artículo.

  4. Tengo que desarrollar sobre un IIS remoto.
    ¿Como se hace para poder depurar?

    ¿Se puede?¿o es obligatorio que este en local para poder depurar?

    Gracias.

  5. Hola Guillermo, no tengo Visual Interdev como para decirte, puedes escribirle a Sergio Vázquez (desde su blog, ve el comentario anterior) el te podría decir si afecto tener los dos instalados.
    Saludos.

  6. Buenas, llegue a esta web buscando ayuda para depurar ASP (proyectos antiguos en mi nuevo trabajo)…

    Seguí los pasos y ya tengo la macro creada.

    Pueden ayudarme con la parte del ISS y la configuracion o pasos a seguir para poder depurar?

    Por cierto lo que yo tengo son miles de archivos ASP (algun htm y demas) sueltos, no es un proyecto en sí…

    gracias.

  7. Hola @Miguel Hdez

    Te recomendaria que utilices VS2008 (ya viene mejor preparado para esta tarea)
    Cual es el problema que tienes especificamente? Estas depurando en tu misma maquina o quieres depurar remotamente? comentame mas tu ambiente de trabajo.

    Te puede ayudar esto (aunque es para ASP.NET)
    INFO: Errores frecuentes al depurar aplicaciones ASP.NET en Visual Studio .NET
    http://support.microsoft.com/?scid=kb;es-es;E306172

  8. Gracias por responder tan rapido.

    Mi escenario es el siguiente:

    tengo una web realizada en ASP. Esta formada por infinidad de archivos .asp( es una intranet corporativa). Todos estos archivos que estaban en un servidor los traje a mi maquina para poder depurar tranquilo y luego poner en produccion los cambios.

    Con el VS2008 ya consegui poder abrir uno de estos archivos .asp y que me coloree el codigo incluso que el intelisence funcione, pero no puedo editar ni ejecutar, estas opciones no estan disponibles.

    Supongo que de alguna manera tendre que indicarle al VS2008 que todo lo que hay dentro de la carpeta de mi aplicacion es un «proyecto unico».

    La macro que hice siguiendo los pasos de este blog me devuelve el mesaje «No se encuentra el proceso en el ISS. ejecute la pagina…».

    La parte del ISS no la llevo muy bien que digamos.

    Cualquie aporte se agradece.

    Saludos.

  9. @Miguel

    El VS2005/2008 viene con un servidor web para probar/depurar nuestras app ASP.NET 2.0/3.5, pero no se puede ejecutar en este «mini» servudor web paginas ASP Clasicas… para ello tienes que instalar en tu maquina el IIS (Internet Information Server) si tienes un XP Profesional lo debes instalar y configurar, si estas con Windows Vista tienes el IIS7, que para correr ASP Clasico te puede ayudar este post:
    http://blogs.iis.net/bills/archive/2007/05/21/tips-for-classic-asp-developers-on-iis7.aspx
    (todavia no probe Windows 7 para ver como funciona ASP Clasico alli dentro) pero si lo hicimos en Win2008 (idem Vista)

    Hay mucha informacion de como configurar el IIS en tu maquina (cual sistema operativo tienes?) podrias buscar en geeks.ms 🙂

    Sintesis:
    Debes entonces reproducir el servidor en tu mauqina instalando el IIS.

    Saludos

  10. Tengo el IIS7 y no tengo mayores problemas con las aplicaciones .NET.

    Voy a revisar el enlace que me pasas y a buscar un poco por geeks.ms que la conozco no hace mucho y tal vez encuentre algo.

    gracias.

  11. Gracias por el post. Muy claro.
    Quiero dejar alguna nota adicional que a mi me resolvio un problema. Cuando la macro llegaba a la linea

    process.Attach2(«script»)

    daba una excepcion «Excepcion de HRESULT: 0x8971001E». Probando un poco determine que las colecciones estan en el idioma del IDE, por lo que en lugar de «script» hay que usar «Secuencia de comandos» (Gracias MS!!) o sea que queda asi:

    process.Attach2(«Secuencia de comandos»)

    y asi funciona!!

    Saludos.

  12. No me sale lo de las macros, he instalado el Visual Web Developer 2005 y el 2010 pero no hay manera, ¿en que versión está lo de las macros?.

    Gracias por los excelentes artículos.

  13. No puedo crear macros, estoy usando MS Visual Web developer Express 2005 y 2010, ¿que tengo que instalarme para poder depurar o poner la macro que se comenta en el artículo?

    Gracias

  14. Hola
    No se si estara activo este foro, pero que interesante y que buen al ayuda
    El problema que tengo cuando intento correr la macro es que me da este mensaje el depurador
    Error al asociar automáticamente al proceso ‘[2488] aspnet_wp.exe’ en el equipo….
    Consulte la documentación del depurador de Visual Studio .NET para especificar correctamente la versión de Microsoft .NET Framework que va a utilizar la aplicación para depurar.

    Si alguien me puede echar una mano..

    Gracias

Responder a fernandezja Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *