JASoft.org

Cambio automático de cultura en ASP.NET 2.0

Cambio automático de cultura en ASP.NET 2.0
A la hora de hacer aplicaciones multi-idioma hay muchas cosas a tener en cuenta. Entre ellas la fundamental es averiguar cuál es el idioma que desea emplear el usuario y adaptar tanto la interfaz de usuario como las otras características culturales (números, fechas, etc) al idioma elegido. Si no disponemos de una lista desplegable, unas banderitas, o algo similar para que los usuarios elijan el idioma, lo que debemos hacer es adaptarnos automáticamente al idioma elgido por éstos en su navegador (Herramientas·Opciones de Internet·General·Idioma). La lista de idiomas allí presente se envía de manera automática y transparente por el navegador (no sólo IE, sino en todos los navegadores) al servidor en forma de cabeceras HTTP con el nombre "Accept-Language". Estas cabeceras se pueden capturar en el servidor muy fácilmente, y en ASP.NET más todavía con la propiedad UserLanguages, y con ellas trabajamos para conseguir la adaptación automática al idioma. El código sería básicamente este (de... [Más]

FAQ: Al pasar al servidor de producción me deja de funcionar la seguridad y me da un error ¿por qué?

FAQ: Al pasar al servidor de producción me deja de funcionar la seguridad y me da un error ¿por qué?
Una pregunta super-frecuente que recibo tanto en los cursos de campusMVP como en eventos es la de:  "¿Por qué cuando paso mi aplicación a producción de repente me deja de funcionar todo lo que tiene que ver con Membership, Roles, etc...? De hecho obtengo un error de que no se puede conectar a la base de datos..." El problema que tienes con la base de datos es que, por defecto, el proveedor de SQL Server que viene con ASP.NET 2.0 parte de la base (equivocada generalmente) de que vas a usar SQL Server 2005 Express Edition. Esta base de datos tiene la particularidad de que es capaz de adjuntar dinámicamente archivos .MDB (de datos SQL Server), es decir, sin necesidad de adjuntarlos. Si te fijas en la carpeta App_Data de tu aplicación debes de tener un archivo ASP_NET.MDB que es el que se crea automáticamente para gestionar estos datos y luego adjuntarlo dinámicamente a la versión Express. El problema es que si usas SQL Server 2005 "completo" o una versión anterior lo de adjuntar... [Más]

Fraccionamiento de las secciones de configuración en web.config

Fraccionamiento de las secciones de configuración en web.config
Aunque esto es algo muy poco conocido por los programadores de ASP.NET, es posible mover secciones completas de la configuración a sus propios archivos independientes de web.config. Ello se consigue usando el atributo configSource en la sección correspondiente. Por ejemplo, podemos escribir en el nodo ConnectionStrings lo siguiente: <connectionStrings configSource="conexiones.config"/> y ahora tener un archivo independiente llamado conexiones.config que contenga esa sección completa: <connectionStrings> <add name="Clientes" connectionString="..."/> <add name="Principal" connectionString="..."/> </connectionStrings> Esto puede resultar útil en muchas ocasiones. Por ejemplo, podemos cambiar más fácilmente entre los ajustes de producción y de desarrollo, manteniendo en común el resto de la configuración. Otro motivo sería proteger de manera especial esa sección y otorgarle sus propios permisos de lectura y escritura. Uno de los motivos más i... [Más]

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]

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