JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Cómo suplantar usuarios de tu aplicación para soporte

Esta es una cuestión bastante habitual y es que es muy útil, siendo administrador de una aplicación, poder entrar como cualquier otro usuario para ver lo mismo que éste ve y poder hacer cosas en su nombre. Sobre todo a la hora de dar soporte técnico, poder atender mejor a los usuarios, ayudarles o detectar posibles problemas en sus cuentas. La idea es la de poder entrar haciéndonos pasar por otros usuarios, como si fuésemos ellos, pero sin conocer sus credenciales. El otro día un alumno de mi curso de Desarrollo Web con ASP.NET me preguntó  precisamente esto, por lo que me he decidido a grabar un vídeo práctico explicando como hacerlo. Como verás es muy fácil, pero interesante. Dejo el vídeo a continuación y te recomiendo que, antes, te leas este post que escribí hace tiempo sobre el funcionamiento de las cookies de autenticación. ¡Espero que te resulte &... [Más]

Cómo forzar la configuración correcta de ASP.NET en un servidor

Existen una serie de ajustes en aplicaciones Web que deberíamos cuidar especialmente cuando las despleguemos en un servidor en producción. Se trata de características que, de estar mal establecidas en un servidor abierto a cualquiera a través de Internet, pueden suponer un problema de seguridad o mermar el rendimiento de una aplicación. En este artículo vamos a estudiar dos de estos ajustes críticos, lo que suelen hacer mal los programadores con ellos y cómo podemos forzar su correcto uso en servidores de producción. Depuración Cuando estamos desarrollando una aplicación Web con ASP.NET (tanto Web Forms como MVC) establecemos una serie de configuraciones que nos facilitan la depuración de las mismas: mensajes de error detallados, depuración paso a paso, trazas del código, etc… Existe un ajuste en la configuración de la aplicación Web (archivo web.config) que controla de manera global el estado de depuración y, por tanto, todas estas características: <compilation debug=”true... [Más]

Cambiando los límites de las URLs en ASP.NET 4.0

La última versión de ASP.NET, la 4.0, incorpora varias opciones de configuración que tienen que ver con las URLs de nuestras páginas. Por ejemplo: los caracteres que son válidos y, por lo tanto, admitidos en una URL. Por defecto existen 8 caracteres especiales que no se admiten en la ruta de una página, a saber: <>&*%:\? La verdad es que es bastante lógico, puesto que no puede existir ningún archivo ni carpeta que los use en su nombre, y además el "et" o "ampersand" (&) y la interrogación (?) forman parte siempre de la parte de parámetros o "Query String" de una URL, no de la ruta. Cuando se introduce uno de estos caracteres en una URL, ASP.NET devuelve un error 400, de petición errónea: En ASP.NET 4.0 es posible definir la lista de caracteres no válidos en una URL tocando el web.config de la aplicación, en concreto el nodo httpRuntime en su propiedad requestPathInvalidChars: <httpRuntime requestPathInvalidChars="&lt;,&gt;,*,%,&amp;,:,\,?" ... [Más]

Anexo a mi libro de ASP.NET 4.0 - Plantillas AJAX

Por fin está disponible el anexo a mi libro de ASP.NET 4.0. Se trata de un pequeño capítulo adicional que explica unos pequeños cambios que ha habido en la versión definitiva respecto a la funcionalidad de plantillas HTML enlazadas a datos de ASP.NET Ajax Library, en el capítulo 5. Básicamente explica cómo obtener la última versión del código de Script y sacarle partido desde ASP.NET o desde cualquier otra tecnología (PHP, JSP, MVC o incluso HTML puro y duro), y los pequeños cambios en sintaxis que ha habido en un par de características en la versión final. Puedes leerlo íntegramente gratis on-line en Scribd: Tecnologías ASP.NET 4.0 - Anexo A - Enlazado a datos AJAX

Uso de la caché de ASP.NET 4.0 fuera de aplicaciones Web - Perfiles de .NET

La caché de ASP.NET es una maravilla. Permite almacenar en memoria (o en otra ubicación, ya que es extensible) datos costosos de obtener y que no caduquen de inmediato. De esta forma las siguientes veces que debamos utilizarlos en la misma aplicación podremos obtenerlos desde la caché sin necesidad de volver a calcularlos o generarlos. Además la caché de ASP.NET ofrece un montón de características avanzadas que van más allá del simple almacenamiento. Por ejemplo podemos establecer caducidades de la información tanto en un determinado momento en el futuro, si no se utiliza tras un periodo, haciendo que unas informaciones dependan del valor de otras o creando dependencias de ciertos elementos externos (como un archivo, una consulta en la base de datos o una clave del registro). Esto último es de especial interés, pues nos brinda la posibilidad de hacer cosas bastante complicadas sin apenas código. Por ejemplo, si nuestra aplicación depende de la información almacenada en un archivo en e... [Más]

"Serializar" objetos comprimiéndolos antes para ahorrar espacio y los problemas que podremos tener

Esta pregunta surgió el otro día en uno de mis cursos on-line de campusMVP y la verdad es que es bastante interesante, no tanto porque sea especialmente difícil de hacer, si no por las implicaciones que tiene su aplicación en la práctica. La idea está muy bien: dado que estoy almacenando objetos de mi programa en disco (o enviándolos a través de la red), si los comprimo debería ahorrar espacio en disco y/o ancho de banda. De hecho, la idea es tan buena que en ASP.NET 4.0 una de las novedades es que el almacenamiento de sesión fuera de proceso (es decir, cuando guardamos la sesión en un servidor de estado remoto o en un SQL Server), tiene una nueva opción para permitir la compresión de los datos antes de enviarlos para su almacenamiento o recuperación de sesión. Esto es muy útil para sitios web que quieren acelerar la transferencia de información en una granja de servidores, pero tiene la contrapartida de que los procesadores estarán más cargados debido a las operacioens de compresión ... [Más]

Nueva versión de CassiniAqui: sirve localmente cualquier carpeta con una aplicación Web

Hace ya más de 4 años, en diciembre de 2005, creé esta pequeña pero útil herramienta para programadores llamada CassiniAqui. Se trata de una aplicación que, una vez registrada en el sistema, añade una nueva opción al menú contextual de cada carpeta que nos permite servir sus contenidos usando el servidor Web de desarrollo de Visual Studio: Esto resulta muy útil a la hora de probar aplicaciones Web sin tener que abrir Visual Studio, para poder jugar con ellas de forma ligera en local. El servidor de desarrollo que viene con cualquier versión de Visual Studio es una versión modificada del conocido servidor Web Open Source llamado Cassini, de ahí el nombre de la herramienta. Novedades de esta versión Esta versión de CassiniAqui lleva el número 4.0 para hacerlo coincidir con el de la plataforma .NET. Lo he escrito con Visual Studio 2010 y C#, pero lo he compilado con la versión 2.0 del framework, por lo que puede ser utilizado aunque tengamos instaladas versiones más antig... [Más]

Enviar un archivo al navegador desde ASP.NET

Otra pregunta muy común entre los programadores principantes es de qué manera pueden enviar al navegador de sus usuarios desde una página ASPX los contenidos de un archivo que está en el servidor. La mayoría conoce el método Write de la clase HttpResponse que se llama desde una página simplemente escribiendo:Response.Write("Hola desde mi página ASPX"); que lo que hace es introducir en el código de la página actual ese mensaje. Este método no se suele utilizar ya que introduce el texto fuera del flujo normal de renderizado de la página y por lo tanto suele quedar al principio de la página, descolgado. Se incorporó más por compatibilidad con ASP 3.0 clásico que por otra cosa. Sin embargo esto devuelve texto únicamente al cliente. ¿Qué pasa si queremos enviar contenidos binarios, como los de un archivo PDF o un DOCX? Tipos MIME Veamos un concepto básico de Internet explicado de manera somera para los propósitos que nos ocupan ahora: el envío de archivos. El  protocolo en... [Más]

Cómo incorporar Dynamic Data a un proyecto Web existente

El pasado lunes, en la charla on-line que impartí para el NEt User Group de la UOC sobre Dynamic Data, comenté que existía la posibilidad de sacarle partido a esta interesante tecnología sin tener que crear desde cero un proyecto especial de Dynamic Data, es decir, sin partir de este diálogo: Tal y como prometí ese día, a continuación explico cómo añadir las capacidades de Dynamic Data a un proyecto Web pre-existente. Como veremos se trata de algo muy sencillo. Dado que Dynamic Data se basa en el uso plantillas, tanto para las acciones como para generar campos, entidades concretas y otros controles, lo primero que debemos hacer es copiar desde un proyecto Dynamic Data pre-existente los siguientes elementos: 1.- La carpeta de nombre DynamicData2.- La página maestra Site.master y su correspondiente archivo de código Site.master.vb (o.cs si trabajamos con C#)3.- La hoja de estilos Site.css Usa el propio explorador de archivos de Windows para copiarlos, y luego refresca l... [Más]

Server.GetLastError no funciona en IIS 7.0 o superior: cómo solucionarlo y un truco general para IIS 7.5

Si llevas unos cuantos años en esto del desarrollo Web seguro que tienes todavía aplicaciones por ahí escritas en ASP 3.0, también conocido como "ASP Clásico". Este precursor del actual ASP era estupendo y funciona de maravilla aún hoy en día. A pesar de todas las virguerías técnicas existentes en la actualidad (que me encantan) me confieso un enamorado de esa antigua plataforma. El caso es que aún hoy en día, si tienes que montar una aplicación de ASP 3.0 incluso en un moderno Windows Server 2008 R2 con IIS 7.5, podrás hacerlo sin problemas y funcionará todo de maravilla. O casi... El otro día tuvimos que montar una de nuestras aplicaciones "legacy" en este entorno precisamente y todo parecía ir de maravilla. El caso es que nosotros instrumentamos todas nuestras aplicaciones, incluso  las antiguas, para llevar un registro automático de todos los eventos de inte... [Más]