JASoft.org

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

MENÚ - JASoft: JM Alarcón

Problemas de sesión aleatorios con ASP.NET 2.0 e IIS 6.0

Bueno, esta es una de esas cosas que pueden volver loco a uno antes de encontrar el motivo que lo está provocando. Supón que tienes una aplicación Web que funciona de maravilla y que utiliza algunas variables de sesión para guardar datos del usuario (por ejemplo un identificador o cualquier otra cosa). Colocas la aplicación en producción en un servidor Windows 2003 Server y todo parece ir perfecto. El servidor es IIS 6.0 y la aplicación está escrita en ASP.NET 2.0. A medida que la cantidad de peticiones y usuarios crece la aplicación funciona de maravilla y se comporta muy bien, gestionando muchas peticiones por segundo sin problema hasta que de repente un día tienes una llamada... "Disculpe, soy un usuario de su aplicación y me hoy me ha pasado una cosa muy rara. He entrado con mi clave y nada más hacerlo me han aparecido los datos de otra empresa que no es la mía. Es como si se nos hubiesen cruzado las líneas. ¿no le estará pasando esto a alguien más y verán mis datos, verdad?" ... [Más]

Burradas de programadores: ¿la clave de licencia, por favor? Aquí está. De nada...

Esta es otra de esas buenísimas que cuando las veo no me puedo resistir a contar aquí, para que veamos que siempre hay quien supera al resto en algo :-D Resulta que un programa cuya licencia había caducado, al arrancar le mostraba al usuario un mensaje de error sin permitirle continuar y ni siquiera recuperar algunos datos que tenía dentro. Investigando un poco en la carpeta de archivos del programa con la esperanza de encontrar la base de datos del programa e intentar extraer la información de allí con un poco de esfuerzo se encontró un archivo llamado Licence.key. Como es de esperar (yo hubiera hecho lo mismo) abrió el archivo -que era de texto- y encontró el siguiente contenido: ! Legalese Pro License File - Do Not Modify! Generated Mon Jan 24 21:17:47 EST 2001expiration-date = 07-31-2005key = 78c52ab4f6244475fb7ebefb21b7111c "¡Oye!, vamos a cambiar esa fecha a ver qué pasa! A lo mejor me deja continuar usándolo un rato más", pensó el interfecto... Obviamente esto no podía fu... [Más]

Evítate problemas: pon SIEMPRE un nombre de aplicación en Web.config

El bueno de Scott Guthrie (del equipo de desarrollo de ASp.NET) puso ya hace tiempo un post muy bueno sobre porqué era muy recomendable (si no casi indispensable) poner un nombre dentro de web.config dentro de la configuración de los proveedores (tanto de Membership como de Roles, etc...). El motivo es que si no lo hacemos, al mover la aplicación no seremos capaces de acceder a los datos que hay en la base de datos pues casi seguro que hemos cambiado la ruta de la aplicación respecto al servidor de desarrollo, y es muy desagradable :-( Hoy me ha surgido una pregunta relacionada con esto y aprovecho la ocasión para recordarlo a todos los lectores de este blog desde aquí. Así que léete el post completo de Scott y ya sabes: que no se te olvidé nunca más :-)

AJAX con ASP.NET 2.0 (The "a pelo" series): Script Callbacks (yIII): Un ejemplo completo

Para finalizar las "the a-pelo series" sobre AJAX dedicadas a los Script Callbacks en ASP.NET 2.0 vamos a realizar un ejemplo completo que muestre todo lo que comentamos en los post precedentes. Nuestro ejemplo será muy sencillo pero suficiente para comprender todo lo explicado hasta ahora. Crearemos una página con una lista de categorías y un botón que, al ser pulsado, mostrará debajo (sin hacer postback) los contenidos de dicha categoría (sin florituras). La siguiente figura muestra la idea: Un poco cutre ¿no? Pero de esta forma obviaremos otro código que nos pueda descentrar de nuestro objetivo que es entender los Script Callback. Los preparativos Crea un nuevo proyecto de Visual Web Developer. En la página por defecto (Default.aspx) arrastra un control DropDownList y llámale 'ddlCategorías'. Asígnale una lista de elementos (Empresas, Libros, Blogs, Revistas...). No marques su opción de AutoPostBack. Ahora añade un botón. Pero ojo, muy importante, no nos sirve un botón de AS... [Más]

AJAX con ASP.NET 2.0 (The "a pelo" series): Script Callbacks (II): La interfaz ICallbackEventHandler

Bueno, en el anterior post, ya hemos visto que para poder hacer uso de la característica de Callback nativa de ASP.NET 2.0 sólo hay que implementar la interfaz ICallbackEventHandler. Ésta sólo tiene dos miembros: Método RaiseCallbackEvent: Es llamado automáticamente cuando se produce un Callback al servidor mediante Script. Se le pasa como parámetro una cadena que se genera en el lado de cliente (en el navegador) antes del envío. Enseguida veremos la manera de hacerlo. Dentro de este método hacemos el procesamiento que necesitemos, por ejemplo, recibimos un identificador y vamos a una base de datos para obtener los datos de detalle de una entidad asociada. Cualquier cosa. Su definición es la siguiente: void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) Método GetCallbackResult: este es el método que se llama automáticamente para devolver los resultados al cliente. Dichos resultados se devuelven en forma de cadena (es el tipo devuelto por el método) y se pas... [Más]

AJAX con ASP.NET 2.0 (The "a pelo" series): Script Callbacks (I)

Seguro que recuerdas que no hace mucho estuve haciendo en el blog una serie sobre AJAX (1, 2, 3, 4, 5, 6 y 7) "super-a-pelo", es decir, usando sólo JavaScipt y tu imaginación, nada de Atlas y compañía. La verdad es que tuvo bastante éxito y muchas visitas, referencias, trackbacks, etc... Viendo que el tema suscita interés voy a continuarlo un poco pero esta vez haciéndolo con una nueva característica que es nativa a ASP.NET 2.0 y que se denomina Script Callbacks. Esto facilita bastante el trabajo con AJAX respecto a hacerlo todo uno mismo, pero aún así sigue siendo más complicado que usar una biblioteca estilo AJAX.NET o la propia Atlas de Microsoft que ahora está en beta. Por este motivo y dado que sigue siendo una técnica algo rupestre denominaré a esta nueva serie como AJAX con .NET: The "a pelo" series ;-) Bueno, veamos primero un poquito de teoría y en los siguientes post pasaremos ya a la práctica de esta técnica nativa de .NET a la que podremos sacar bastante partido... [Más]

Reproducir MP3, vídeo y otros tipos de archivos con .NET

En mis dos anteriores post comentaba la manera de reproducri archivos de sonido del sistema con .NET, tanto en la versión 1.x como en la 2.0. En el último un visitante preguntaba cómo podemos reproducir MP3 desde .NET. La solución más sencilla es la de toda la vida: recurrir a la API de MCI para hacerlo. MCI es el acrónimo de Media Control Interface. se trata de una API basada en comandos de texto que permite controlar los diferentes dispositivos multimedia de reproducción y grabación que hay en el sistema. Gracias a MCI podemos reproducir vídeo, audio, CDs, MIDI, etc.. . así como grabar desde micrófonos, cámaras y demás, todo ello de forma estándar e independiente del dispositivo real que haya detrás. La única función importante de MCI que nos interesa para nuestro ejemplo de reproducción de MP3 es 'mciSendString'. Ésta permite enviar comandos MCI para abrir dispositivos y operar con ellos. Para reproducir un archivo MP3 (o realmente cualquier otro) sólo necesitamos conocer dos co... [Más]

Reproducir sonidos del sistema en nuestra aplicación .NET 1.x

Este post surge a raíz del anterior en el que explicaba como reproducir sonidos en .NET 2.0 (viene muy facilito), ya que un asiduo lector de este blog ha preguntado cómo se harí en versiones anteriores. La respuesta a esta pregunta es: ¡usando la API de Windows!. Los que llevamos unos cuantos años programando con tecnologías Microsoft (los dinosaurios que usábamos ActiveX y estas cosas) estamos todos muy acostumbrados a usar la API de windows y no nos suena raro. En .NEt se sigue usando para algunas cosas, pero la verdad es que está todo tan mascado que pocas veces suele hacer falta. En este caso la función clave de la API MessageBeep. Esta función permite reproducir sonidos predefinidos del sistema con sólo pasarle su código numérico. Por tanto lo único que necesitamos para replicar la funcionalidad de la clase que viene con .NET 2.0 es declarar esta función y conocer las constantes. así que una clase similar a la anterior sería la siguiente (código completo): using System;u... [Más]

Reproducir sonidos del sistema en nuestra aplicación .NET 2.0

Este es un truco rápido para la tarde del sábado (estoy un poco vago), pero que seguro que a más de uno le resulta útil... ¿Te gustaría que, por ejemplo, cuando muestres un cuadro de mensaje se oiga el sonido del sistema adecuado a la situación?. Por ejemplo, lanzas un mensaje de error y que suene el sonido que el usuario tenga configurado para los errores. En .NET 2.0 es algo realmente fácil gracias a la nueva clase SystemSounds del espacio de nombres System.Media. Podemos escribir: System.Media.SystemSounds.Asterisk.Play();MessageBox.Show("Error en la aplicación", "Se ha producido un error xxxxx, blah, blah", MessageBoxButtons.OK, MessageBoxIcon.Error); la primera línea hace que suene el sonido predeterminado de atención, consiguiendo un diálogo aún más realista. Los sonidos disponibles con esta clase son los siguientes: Asterisk, Beep, Exclamation, Hand y Question.

Creación de un control botón ASP.NET para regreso automático

Una cuestión común en todas las aplicaciones Web es hacer que la navegación sea lo más sencilla posible para nuestros usuarios. Una situación muy habitual es la de reutilizar una página para varios propósitos de modo que a ésta se puede llegar por diversos sitios. Si colocamos un botón de "Cancelar" o "Volver" es frecuente que tengamos que escribir bastante código para asegurarnos que devolvemos al usuario al lugar del que vino teniendo en cuenta los diferentes "postbacks" producidos por los controles de la página. El siguiente control permite aislarnos de este tipo de cosas haciendo por debajo él todo el trabajo. Añade un nuevo control de usuario y llámale "Volver.ascx". Sobre su superficie coloca simplemente un botón con el nombre cmdVolver y asígnale el texto "Volver". En el archivo de código escribe lo siguiente (en C#, en VB sería más o menos igual): using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;usi... [Más]