Cómo usar Fiddler con el servidor de desarrollo de ASP.NET

En mi anterior post comentaba los peligros de usar alegremente los controles UpdatePanel de AJAX y mostraba con la excelente herramienta Fiddler cómo eran las peticiones que se enviaban y recibían.


Alguien me ha preguntado cómo hago para poder utilizar Fiddler con el servidor Web de desarrollo que viene con Visual Studio (conocido comunmente como Cassini), ya que por mucho que actives Fiddler por defecto no captura las peticiones hechas a dicho servidor.


El servidor de desarrollo sólo admite peticiones locales y accedemos a ése a través de una URL del tipo:



http://locahost:3572/miapp


Eligiendo un puerto aleatorio de cada vez.


Cuando lanzas Fiddler éste se coloca como proxy de Internet Explorer interceptando todas las llamadas que hace éste a las páginas Web. Lo que ocurre es que IE cuando detecta que una llamada se va a hacer en local (contra localhost vamos) automáticamente hace caso omiso de los posibles proxy que hubiera y lanza la petición directamente, de ahí que Fiddler no funcione.


Podemos solucionar este problema de una manera sencilla usando el siguiente truco.


Modificación al vuelo de la URL en Fiddler


La herramienta Fiddler nos permite responder a diferentes eventos mientras realiza una petición, los cuales podemos interceptar con código de Script. Se puede ver el ´codigo por defecto de estos eventos usando el menú «Rules» de fiddler, así:



Uno de estos eventos se produce justo antes de lanzar la petición desde el proxy y se llama «OnBeforeRequest«. Por lo tanto podemos modificar la URL local para que IE piense que es externa, y volver a modificarla en el evento mencionado antes de que el proxy lance la petición. La manera más fácil es añadir a la palabra ‘localhost’ un punto justo al final. Así IE no la reconocerá como la URL local y la petición pasará a través de Fiddler. En el evento OnBeforeRequest sólo tenemos que añadir los siguiente al principio:

        if (oSession.host.substr(0, 10)==«localhost.»)
        {
         oSession.host=oSession.host.replace(«localhost.», «127.0.0.1»);
        }

Esto hace que cuando Fiddler detecta una petición a cualquier url que empiece por «localhost.» la transforma en una llamada a la misma URL dentro de «127.0.0.1», que es equivalente.


Obviamente podríamos usar cualquier otro añadido a la URL local para cambiar la petición. Incluso en lugar de un simple punto añadir un subdominio especial del estilo «.local», para que fueran URLs del estilo «localhost.local» o algo así, cambiando por tanto el pequeño código de intercepción en el evento, pero el punto es el camino más rápido y va de maravilla.


Así que ya sabes, haz ese retoque en el evento, y a partir de entonces lanza tu aplicación y justo tras haber lanzado Fiddler añádele un punto a localhost al final para que Fiddler entre en acción y puedas analizar con detalle todo el trasiego de información entre cliente y servidor que produce tu aplicación, incluyendo peticiones AJAX encualquier puerto 🙂

Los peligros del Update Panel

Las tecnologías de Microsoft han adolecido tradicionalmente de un problema que es a la vez, paradójicamente, su mayor ventaja: la sencillez aparente de uso. Pienso que  la clave del éxito de Windows, Office y otros muchos productos de la casa de Redmond ha sido y es su sencillez de uso. Pero esta misma sencillez de uso se convierte también un arma de doble filo: hace que la gente se quede en la superficie de las cosas, sin comprender bien las consecuencias de lo que hacen. Ha pasado toda la vida con las versiones de servidor de Windows, y ha pasado y pasa con las herramientas de desarrollo. Al ser fáciles de configurar y utilizar la gente enseguida «controla» la tecnología correspondiente, lo cual es un error grave.


En este caso me estoy refiriendo en concreto a la tecnología ASP.NET AJAX que tanto facilita el desarrollo de aplicaciones de interfaz avanzada para la Web. Desde mi punto de vista el Update Panel es una obra de arte que debería llevar un premio al diseño de componentes y arquitecturas. Antes de su existencia la creación de aplicaciones AJAX era compleja, a pesar de los diversos frameworks para ello que existían. El uso de los Update Panel convierte en algo realmente sencillo el crear aplicaciones Web con capacidad de respuesta rápida y sin refresco de página. Una maravilla vamos.


Lo cierto es que su sencillez ha hecho que la gran mayoría de los que los utilizan lo hagan sin un buen criterio. Todo el mundo «sabe» hacer aplicaciones AJAX hoy en día. Los lamentos vienen después cuando las aplicaciones deben escalar y ser eficientes, como en casi todos los casos en los que se ve a diferencia entre un buen y un mal programador.


Veamos qué pasa cuando colocas un Update Panel en una página ASPX para hacer algo tan tonto como actualizar la hora actual en una etiqueta. En una página vacía colocas un ScriptManager, un Update Panel y dentro de éste una etiqueta y un botón. al pulsar el botón asignas en un evento de servidor la hora actual a la etiqueta, así:

    protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToShortTimeString();
}

Una chorrada total. Vale ahora ejecutas y voilá!, mágicamente el Update Panel hace su trabajo y ves aparecer la hora en la eiqueta sin hacer un postback tradicional al servidor ysin que la página ni siquiere parpadee.


Estupendo. Pero vamos a analizar qué pasa entre bambalinas y más en concreto qué información se envía y se recibe a y desde el servidor. Para ello he utilizado a mi fiel amigo Fiddler, el analizador de tráfico que más me gusta. El resultado de la petición de ida y vuelta del Update Panel es el que se puede ver en esta figura:



En la parte de arriba podemos ver la petición que se envía y en la de abajo la respuesta recibida. ¡En total 889 caracteres (casi 1 KB) para realmente obtener una información (la hora) que ocupa solamente 8 caracteres!


Impresionante. Ahora imagínate esta situación en una página compleja en la que el avezado programador se ha dedicado a dejar caer UpdatePanels por doquier (cosa muy común y una mala práctica). Ahí es nada.


Existen formas mucho más eficientes de conseguir lo mismo eficientemente usando el mucho más amplio framework de ASP.NET AJAX, tal y como se explica en nuestro curso de ASP.NET AJAX.


La conclusión es que hay que utilizar las tecnologías con cabeza y comprendiendo lo que se hace. Lo fácil de usar es un arma de doble filo.

La actualización de Windows Vista más inutil de la historia.

Hace un rato, al llegar a casa y quitar de suspensión mi portátil, me encuentro con que me saltan actualizaciones del Sistema Operativo, lo cual me pareció raro porque aún ayer o anteayer tuve que instalar unas cuantas. «Será importante», me dije.


Tengo la buena costumbre de repasarlas siempre antes de que admitir que se instalen, y así me voy enterando de qué me instalan los chicos de Redmond todos los meses. El caso es que la primera de las actualizaciones (KB955020) de hoy ocupaba bastante (56,3 MB) y según indicaba era para actualizar los diccionarios de inglés y alemán (mi sistema de casa está en castellano).


Primera noticia que tengo de que Windows (y no Word u Outlook) incorpora «de serie» un diccionario. Oye, y además resulta que la actualización es considerada importante y me dice que seguramente tengo que reiniciar el equipo:



El caso es que claro, me voy a la KB a ver qué tipo de actualización es esta, porque no me gusta nada reinicair mi equipo y descargarme casi 60MB por una chorrada, y cual sería mi sorpresa cuando veo esto (pulsa la imagen para ir al original):



¿Comorrrrrl? Que mi Windows no va a reconocer en inglés y alemán palabras tan útiles como «Friendster,» «Klum,» «Nazr,» «Obama,» o «Racicot». Diosss, me tengo que bajar cuanto antes esta actualización 😉


¡Hombre, por Dios!, menuda tomadura de pelo, no me fastidies. Imagino que tiene que haber sido un despiste, porque sino no se entiende tamaño desatino. En fin, ya sabes, desmarca la descarga de esa actualización y ahorrarás ancho de banda, tiempo, un reinicio y contribuirás a que Internet vaya un poquito más rápido. Lástima que en el ordenador de la oficina no pueda evitar que se instale (por eso esta mañana tuve que reiniciarlo, en fin).


No digas que no te lo avisé, jeje

TRUCO: snippet de JavaScript para facilitar la captura de información de una página Web

Este es un truco muy sencillo pero que puede resultar realmente útil.


Cuando estamos navegando por Internet en busca de información hay veces que nos interesa guardar ciertos contenidos pero:



· A lo mejor no nos permite guardarlos a disco.


· Está deshabilitado copiar y pegar mediante JavaScript (fácil de solucionar, pero un «peñazo»)


· La información no nos interesa exactamente cómo está, sino que queremos quitar cosas o añadir algunos comentarios propios que los complementen.


· La página tiene muchas otras cosas alrededor que nos sobran.


· Etc…


Para estos casos hay un snippet de JavaScript puede sernos de gran utilidad. Al utilizarlo lo que conseguimos es que cualquier página que estemos visualizando se convierta en editable, de forma que podamos modificarla a voluntad antes de copiarla (o cortarla) para almacenar el contenido. Así podremos quitar lo que no nos guste, redimensionar gráficos, mover partes de un lado a otro, añadir comentarios, etc… Realmente útil.


Para tenerlo a mano siempre haz lo siguiente:




  1. navega a cualquier página. Por ejemplo: about:blank (que es una página en blanco).


  2. Agrega esa página a tus favoritos, por ejemplo en la sección de «Vínculos» para que esté siempre a mano en la barra de herramientas


  3. Edita el favorito con el botón derecho·Propiedades. En la URL sustituye tu página por el siguiente texto:



javascript:document.body.contentEditable=’true’; document.designMode=’on’; void 0


¡Listo! Ahora a disfrutar y a editar a tu gusto las páginas 🙂


Por cierto, esto funciona tanto en Internet Explorer como en Firefox.

GridView en ASP.NET: ya está disponible para visualización Off-line

Ya está disponible para que veas on-line la grabación del Webcast que hizimos anteayer Luis Miguel Blanco y yo sobre el uso de rejillas en Windows Forms (él) y en Web (yo).


Puedes verlo pulsando sobre esta imagen:



También te puedes descargar el código de ejemplo desde aquí. En el caso de mi ponencia para la Web tienes disponibles versiones de los ejemplos tanto en VB como en C#. Espero que te resulten útiles.


Y recuerda: si esto te gusta ni te imaginas lo que te pueden gustar y lo que puedes aprender con nuestros cursos on-line de campusMVP 🙂