JASoft.org

Almacenamiento de página o "la caché que dura sólo mientras estás en la página actual"

Almacenamiento de página o "la caché que dura sólo mientras estás en la página actual"
Para rematar con este asunto del almacenamiento temporal de datos de la aplicaicón y cumplir lo prometido en mi anterior post, voy a explicar el almacenamiento de página, que es bastante sencillo. ¿Qué pasa si queremos almacenar cierta información en nuestra página, que valga sólo para el usuario actual, y que esté disponible mientras dure el uso que éste hace de nuestra página?. Podemos utilizar cualquier elemento de almacenamiento, atado al usuario como una variable de sesión, o no atado a éste (como la caché o una variable de aplicación), pero no es una buena solución puesto que tendremos que estar pendientes de liberar esa memoria cuando el usuario deje de utilizar la página y ya no lo necesitemos. Existe un modo mejor de conseguirlo y es a través del ViewState. Almacenamiento de página en ViewState Como sabemos el ViewState se usa generalmente para almacenar el estado de los diferentes controles que colocamos en una página ASPX. Sin embargo esta característica es en realidad ... [Más]

Hacer caché sólo durante la petición actual

Hacer caché sólo durante la petición actual
Siempre que se habla de la caché suele hacerse refiriéndose a la caché persistente que todos estamos acostumbrados a conocer y usar, bien la caché de salida de las páginas o bien la caché programática usando la clase System.Web.Caching.Cache. Sin embargo hay ocasiones en las que probablemente nos interesaría más hacer una caché mucho menos persistente. Algo que nos dure lo justo para el propósito de un momento determinado y luego no nos tengamos que preocupar siquiera de deshacernos de ella. En concreto me estoy refiriendo a la caché de contexto o caché de una sola petición. Imaginemos el caso: en una petición usamos un manejador propio para interceptarla y hacer algo antes de ser procesada la página o bien obtenemos alguna información más o menos costosa durante un evento de global.asax (en BeginRequest o durante la autenticación de la petición). El caso es que esa información la necesitamos usar de nuevo varias veces durante lo que dura la petición actual: en otros módulos o en di... [Más]

Caché en modo núcleo de HTTP.sys y ASP.NET 2.0

Caché en modo núcleo de HTTP.sys y ASP.NET 2.0
Bueno, es obvio que útlimamente se me da por la caché. El motivo es que he trabajado bastante con ella en los últimos meses por motivos de trabajo en la empresa, por un curso que he estado haciendo para campusMVP, y ya finalmente por parte de la charla que impartí en el developer Day, si bien en este caso por el tiempo que había apenas pude rozar la superficie del asunto... En fin.. El caso es que ya he mencionado alguna vez en posts anteriores que si movemos nuestra aplicación a Windows Server 2003 con Internet Information Server 6.0, podremos sacar partido de la nueva caché en modo núcleo que éste implementa a través de HTTP.sys. Esta caché de modo núcleo se comunica directamente con los componentes de E/S del kernel del sistema, sin pasar por el modo de ejecución usuario, e incrementa el rendimiento de la caché una barbaridad. Como ejemplo podemos ver los resultados del procesamiento de una página ASP.NET cuyo resultado ocupa 4KB de tamaño, usando una caché en modo núcleo y una cac... [Más]

Desactivar la recolección automática de la caché

Desactivar la recolección automática de la caché
Hace poco teníamos un problema con la caché en una aplicación ASP.NET 2.0 desarrollada en Krasis. En esta aplicación se hacía una caché basada en un criterio propio (VaryByCustom). En los equipos de desarrollo (XP) funcionaba estupendamente, pero al subirla al servidor (2003 Server) parecía comportarse erráticamente: a veces funcionaba y a veces no. Era como si hubiera algo que, fuera de nuestro control, se cargar a la caché... ...y de hecho algo había que hacía lo que le daba la gana... El recolector de memoria de caché de ASP.NET. El caso es que ASP.NET no hace caché de las cosas siempre que se lo dices. Ni mucho menos. Depende de la memoria libre que haya, no sólo la del sistema sino también la asignada por el gestor de caché para el propio proceso de la aplicación actual. No hay un tamaño por defecto sino que el gestor lo calcula automáticamente en función de muchos factores (no documentados). Mediante el nodo caching de Web.config se puede controlar hasta cierto punto el comport... [Más]

Uso de la clase Cache de ASP.NET 2.0 fuera de aplicaciones Web.

Uso de la clase Cache de ASP.NET 2.0 fuera de aplicaciones Web.
Hace un par de días Eduardo Quintas publicó en Geeks, un interesante post titulado "Desacoplando System.Web.Cache de nuestra lógica de negocio". En él describía cómo crear mediante el uso de algunos patrones una arquitectura de caché que permitía desacoplar nuestra aplicación de la tecnología de caché utilizada, de forma que usando el mismo código y sólo cambiando el proveedor podríamos usar diferentes tipos de caché y en distintos ámbitos (web, Windows Forms...). Léetelo porque es muy interesante. Al hilo de esto añadí un comentario sobre cómo usar la caché de ASP.NEt fuera de aplicaciones Web. Lo cierto es que las veces que lo he usado sólo ha sido con pruebas y no en aplicaciones reales, por lo que no puedo asegurar que no sea cierto lo que dice Eduardo sobre ciertos problemas al llamarla desde múltiples hilos, pero sí puedo asegurar que funciona mientras estemos dentro de un mismo dominio de aplicación. para usar la caché de ASP.NET en contextos diferentes a la Web basta con inst... [Más]

Cómo evitar la desaparición de Intellisense en el archivo web.config

Cómo evitar la desaparición de Intellisense en el archivo web.config
Hace unas semanas un alumno de mi curso de desarrollo Web de  campusMVP tenía un problema muy común: una vez que usaba la herramienta de configuración de la Web de ASP.NET 2.0 le dejaba de funcionar la característica de IntelliSense en el archivo web.config de su proyecto. Al escribir algo en él lo único que obtenía era algo como esto: Si te fijas bien notarás que ha habido un cambio respecto a antes de usar la herramienta de configuración.... Sí, en efecto, ¡bien visto!, es la declaración de ese espacio de nombres XML en la parte superior: xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0" basta con eliminarla para que todo vuelva a la normalidad y podamos disfrutar de Intellisense a tope, y así se lo hice saber al alumno: La mala noticia es que cada vez que usemos la herramienta de configuración nos volverá a pasar y tendremos que estar quitándolo. Menudo fastidio. Como librarse del problema de una vez por todas El caso es que este alumno enocntró u... [Más]

Cómo modificar la salida de una página a nuestra voluntad

Cómo modificar la salida de una página a nuestra voluntad
Pueden existir ocasiones en las que la salida que nos devuelve una página ASPX no es de nuestro agrado. Si queremos modificar de algún modo el HTML puro y duro que devuelve una página podemos sobrescribir el método Render de la página y ahí actuar a voluntad sobre el HTML generado. Por ejemplo, imaginemos que queremos que todas nuestras páginas, automáticamente, lleven una nota de copyright justo al final (vale, sé que hay muchas formas de hacerlo sin complicarse, hasta con el propio IIS, pero es sólo un ejemplo para ilustrar el concepto). Lo que podemos hacer es capturar el renderizado de la página y modificar el HTML devuelto. Vamos a hacerlo para una sola página. Lo que tenemos que hacer es sobrescribir el método Render, como ya he dicho. El código en VB (para variar) sería así: Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)  Dim sw As New StringWriter  Dim htmlsw As New System.Web.UI.HtmlTextWriter(sw)  'Se renderiza la página ... [Más]

Cómo forzar un determinado adaptador de rendering en ASP.NET 2.0

Cómo forzar un determinado adaptador de rendering en ASP.NET 2.0
Hace unas semanas un lector del blog me escribió comentándome que tenía problemas para validar cierta aplicación Web como XHTML Transitional porque decía que en concreto los controles ImageButton se le renderizaban con un atributo border="0" que no está permitido por XHTML Transitional, y por lo tanto no pasaba la validación de el W3C. El caso es que a mi me renderizaba correctamente el control (sin border, usando estilos) al ponerle la cabecera del transicional: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> El caso es que todo el problema venía de que, al usar el validador de el W3C para llamar a la URL en la que estaba la página, el módulo de renderización adaptativa de ASP.NET no reconocía el agente de usuario del programa que hacía la descarga 8es decir, no lo reconocía como Internet Explorer, Firefox o cualquier otro navegador), y al no saber qué capacidades tiene el cliente que accede a la pági... [Más]

Utilizar diversos navegadores para probar nuestras aplicaciones ASPX

Utilizar diversos navegadores para probar nuestras aplicaciones ASPX
Este truco no lo conoce mucha gente, pero si usas la opción "Explorar con..." al pulsar con el botón derecho en una página ASPX de tu proyecto en Visual Studio 2005: se abre un diálogo muy interesante. Para empezar puedes utilizar el navegador interno de Visual Studio en lugar de IE para navegar por las páginas, y así todo "queda en casa". Muy práctico. Incluso puedes hacer que sea el navegador por defecto. Obviamente basta con pulsar Agregar y seleccionar Firefox.exe para poder navegar con este otro navegador (u Opera o con cualquiera). Además, y muy interesante también, puedes elegir en la lista desplegable de la parte de abajo del diálogo en qué resolución quieres que se abra el navegador elegido, para así probar la aplicación en diversos tamaños de pantalla. Este es uno de esos pequeños detalles que por tenerlo delante de las narices no tocamos nunca y se nos escapan. ¡Con lo útil que es! :-)

Permitir la validación de un control con los validadores estándar de ASP.NET

Permitir la validación de un control con los validadores estándar de ASP.NET
Tal y como prometí en un anterior post, voy a explicar cómo podemos conseguir que un control sea utilizable directamente por los controles de validación estándar que vienen con ASP.NET. Ciertos controles Web (por ejemplo el control Calendar) no permiten su uso combinado con los controles de validación (estilo RequiredFieldValidator, RangeValidator, etc...), lo cual es una lástima porque para poder validar su contenido tenemos que construir nuestro propio control de validación (en fin...) o bien usar eventos de servidor para poder validarlos. Una de las ventajas de los controles de validación de ASP.NET es que ya realizan una validación en el cliente además de la que se hace en el servidor después, lo que ahorra tiempo y agiliza mucho la interfaz. Además están integrados en la validación de la página y permiten comprobar la propiedad IsValid de ésta antes de continuar con suprocesamiento, algo muy útil también. Por otro lado es muy habitual combinar diversos controles Web con una prop... [Más]

Este soy yo y este es mi blog técnico, dedicado al software y a la programación.

¡Sígueme en Twitter!

Mis otros blogs

- JM Alarcón @ campusMVP.es
Contenido técnico en español orientado a desarrolladores
- JMAlarcon.es
Blog personal no técnico: sociedad, innovación, empresa...

Krasis

- campusMVP.es:
Los mejores cursos online de programación en español

- SELF LMS:
La plataforma de elearning más potente del mercado.

Histórico