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 instanciarla adecuadamente ya que toda la funcionalidad está incluida por separado en el espacio de nombres System.Web.Caching. Lo difícil es instanciar la clase Cache de este espacio de nombres.


En concreto la forma más fácil de hacerlo es instanciando la clase HttpRuntime y usando su propiedad Cache. Por ejemplo en una aplicación de consola se haría así (hay que agregar una referencia a System.Web.dll):



using System.Web;
using System.Web.Caching;


public class Prueba
{
 public static void Main()
 {
  HttpRuntime httpRT = new HttpRuntime();
  Cache cache = HttpRuntime.Cache;
  cache[«prueba»] = «Hola Edu»;
  Console.ReadLine();
  Console.WriteLine(cache[«prueba»]);
  Console.ReadLine();
 }
}


En una DLL se haría igual.


Esta caché se mantiene todo el rato para un mismo dominio de aplicación, así que nos vale para cualquier aplicación de host que queramos crear (por ejemplo en una capa de negocio remota) o para un EXE normal mientras se esté ejecutando, por lo que tiene una gran utilidad.


Espero que a le resulte útil a alguien.

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ó una solución muy interesante en un blog italiano (no hay nada como ser políglota). consiste en tocar una sola línea del código fuente de la herramienta de configuración de ASP.NET (Como ya expliqué en su día, esta herramienta está incluida con código fuente con la distribución de .NET, ni siquiera hace falta tener Visual Studio).


En concreto busca el archivo WebAdminPage.cs dentro de la carpeta App_Code. Ábrelo y en la línea 99 detro del método de nombre «SaveConfig», cambia la línea que dice:


config.NamespaceDeclared = true;


y ponla como:


config.NamespaceDeclared = false;


¡Voilà!, a partir de ahora no volverá a meter el espacio de nombres XML y no se perderá el Intellisense.

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
  MyBase.Render(htmlsw)

  ‘Se recupera el HTML
  Dim html As String
  html = sw.ToString()

  ‘Ahora se localiza el final de la página
  Dim pos As Integer
  pos = html.LastIndexOf(«</body>»)

  ‘y se inserta un copyright
  If (pos >= 0) Then
    html = html.Insert(pos 1, «(c) José Manuel Alarcón 2007»)
  End If

  ‘Ahora se escribe a la salida de la página, representada por el parámetro HtmltextWriter
  writer.Write(html)
End Sub


Es decir, el primer bloque hace que la página se renderice en nuestro propio «stream» en lugar de en el stream por defecto. Después lo transformamos en una cadena de texto para poder trabajar directamente sobre ella y hacer lo que queramos. Usando expresiones regulares podemos hacer lo que queramos sobre este HTML, lo que nos da una potencia increible, aunque hay que tener cuidado de no tocar nada que haga que la página deje de funcionar.


En nuestro caso de ejemplo simplemente buscamos en donde está el final del cuerpo de la página y metemos justo antes una nota de copyright.


Finalmente hay que escribir el contenido de la cadena al stream que ASP.NET se encarga de enviar al navegador del usuario, que es el que se nos pasa como parámetro a este método.


Con eso hemos modificado al vuelo nuestra página.


Para que todas las páginas hagan esto odemos crear una clase que herede de Page y luego hacer que nuestras páginas hereden de ésta.


Si le echas un poco de imaginación te darás cuenta de que esto abre todo un mundo de posibilidades: desde crear tu propia infraestructura de personalización de páginas y plantillas, hasta la adaptación manual a ciertos dispositivos o circunstancias de los clientes. En la plataforma ya hay formas de hacer todo esto, pero con esta técnica sencilla se nos abren otras posibilidades.


Que lo disfrutes.

Microsoft Developer Day: las mejores prácticas de desarrollo

Developer days


La próxima semana (el jueves) se celebra en Madrid la nueva edición del Microsoft Developer Day, un clásico en eventos orientados a la comunidad de desarrolladores. Como en otras ocasiones, será un evento técnico, donde tendremos oportunidad de ver las mejores prácticas recomendadas para el desarrollo de la un proyecto de Windows o Web, así como las mejores técnicas de seguridad.


Podremos echar un vistazo al futuro próximo y anticiparnos a Microsoft Visual Studio code name «Orcas». Veremos LINQ, nombre de código para un conjunto de extensiones para .NET Framework que abarca consultas sobre datos de lenguaje integrado, establece y transforma operaciones. Esto incluye extensiones de los lenguajes C# y Visual Basic con sintaxis de lengua nativa para consultas y brinda librerías de clase para sacar ventaja de estas capacidades.


Por último asistiremos a una sesión sobre creación de gadgets para Windows vista y a la entrega de premios del concurso http://gadgetizate.madriddotnet.com/


Yo me encuentro entre los ponentes (con la ponencia sobre mejores prácticas de ASP.NET), así como algunos de nuestros tutores de campusMVP.


También estaremos por allí en el stand de campusMVP así que podemos aprovechar la oportunidad para charlar un rato si te pasas 🙂


¡No te lo puedes perder!













Agenda


09:00 – 09:30 Registro.


09:30 – 09:45 Introducción y bienvenida.


09:45 – 10:30 Mejores prácticas en aplicaciones servidor.


10:30 – 11:15 Metodologías con Visual Studio Team System.


11:15 – 11:30 Descanso.


11:30 – 12:15 Mejores prácticas en desarrollo Web: ASP.NET 2.0 y AJAX.


13:45 – 14:30 Mejores prácticas en el desarrollo para SQL Server.


13:00 – 13:45 Mejores prácticas en la experiencia de usuario.


14:30 – 16:00 Almuerzo.


16:00 – 16:45 Mejores prácticas de desarrollo de código seguro.


16:45 – 17:30 Orcas. La nueva generación de Visual Studio.


17:30 – 17:45 Descanso.


17:45 – 18:15 Desarrollo de gadgets para Windows Vista.


18:15 – 18:45 Entrega de premios Concurso de gadgets para Windows Vista.


¡Para cerrar el evento estás cordialmente invitado a disfrutar con nosotros una sesión privada de la película “300” !








Cuándo y dónde


Jueves, 29 de marzo de 2007
de 9:00 a 18:30 h


Kinepolis
Ciudad de la imagen
C/ Edgar Neville, s/n
Pozuelo de Alarcón Madrid 28223


Cómo llegar:




  • Coche: M-40 y N-V, salida por la carretera de Boadilla




  • Autobuses: 573 desde Moncloa y 574 desde Aluche


Inscripción y Registro




  • Registro por teléfono: 902 197 198



  • Registro online



    Registro online

De vuelta de Seattle: Toda una Odisea

Al igual que Ulises cuando volvía de la guerra de Troya, la vuelta de Seattle ha sido toda una Odisea. Sin sirenas, cíclopes ni lotófagos, pero con bastantes avatares. Al final me recorrí medio hemisferio norte para volver.


Dado que había nieve en Nueva York y el avión original que iba a tomar no podía despegar tuve que re-rutarme por Chicago y Londres, con pérdida de enlaces, pérdida de maletas y demás. Resultado: casi dos días de viaje 🙁


En la siguiente foto se pueden ver los billetes utilizados tanto para la ida como para la vuelta:



Pulsar para agrandar


En fin. lo dicho, medio hemisferio.


Respecto al MVP Summit, pues lo pasamos bastante bien como podéis haber leído en los blogs de los amigos, con todas nuestas aventuras en la América profunda (que miedo), fiestas varias, y también como no un poco de trabajo técnico en Microsoft que por desgracia no podemos comentar demasiado. Así que tampoco os voy a aburrir con eso.


En fin, que ya estoy de vuelta y espero ir sacando tiempo estos días para ir publicando algunas cosillas interesantes que tengo en lista de espera.


Hoy por lo de pronto a ver si consigo dormir porque tengo un retraso horario de 8 horas y no me he acostumbrado aún a lo de aquí 🙁

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ágina utiliza por lo tanto el menor común denominador. Ello implica usar HTML puro y duro del más rancio y antiguo, por lo que el control ImageButton en este caso se visualizaba con ese marcado no compatible.


El amigo Marc Contijoch que es como se llama el lector encontró la solución el sólo y me ha permitido ponerla aquí, así que ahí va…


Consiste en introducir en web.config el siguiente nodo:



<browserCaps>
  <case match=«W3C_Validator*»>
    TagWriter = System.Web.UI.HtmlTextWriter
    W3CDomVersion = 1.0
  </case>
</browserCaps>


De este modo si el navegador que accede a nuestra página es el validador de la W3C (que tiene la cadena indicada en el userAgent) se renderiza usando el TagWriter indicado y no da ya problemas.


Al parecer la solución la encontró aquí: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=216241&SiteID=1


Espero que esto le pueda servir a alguien más. ¡Gracias Marc!


Aprovechando este asunto voy a procurar escribir una mini-serie sobre el renderizado de controlas ASP.NET 2.0 y cómo modificarlo, etc… Aunque estos días como se puede comrpobar no he tenido mucho tiempo que digamos y además me voy a Redmond en un par de días, así que no prometo nada sobre tiempos 🙁

Nuevos cursos de certificación de campusMVP

















Certificacion

Nuevos cursos de certificación oficial de Microsoft de campusMVP


¡Por fin lo que muchos llevábais reclamando hace tiempo!. Gracias por haber esperado.


Lanzamos nuestros nuevos cursos de certificación.
Y además puedes comprarnos directamente los libros oficiales de Microsoft (MOC).
Más info sobre MOCs…


 



MCP


Puedes matricularte directamente on-line o llamándonos al teléfono
902 876 475


¡Fecha límite de inscripción el día 31 de Marzo de 2007!
¡Esta vez las plazas están muy limitadas!

 


Estos son los cursos de certificación que tenemos disponibles desde hoy:



902 876 475
 










70–536: TS: Microsoft .NET Framework 2.0 – Application Development Foundation


Curso para preparar el examen oficial 70-536 de Microsoft. Este examen es la base indispensable para obtener cualquier certificación de Microsoft en desarrollo. Curso nuevo, totalmente remodelado y ampliado.

Este curso te prepara para conocer todos los fundamentos de la plataforma .NET hasta obtener un nivel medio/alto de conocimientos y es suficiente para preparar el examen 70-536.


Existen versiones del curso para el lenguaje C# y para VB.



Más info 70-536… 


70-528 – TS: Microsoft .NET Framework 2.0 – Web-Based Client Development


Este curso on-line prepara al alumno para presentarse al examen oficial de certificación 70-528 de Microsoft. Al aprobar este examen el alumno poseerá el título de Technology Specialist en desarrollo Web.


En él se analizan los fundamentos del desarrollo de aplicaciones Web y aplicaciones WAP que es necesario conocer para aprobar dicho examen oficial.


Se parte de la base de que el alumno tiene cierta experiencia con la plataforma .NET.


Más info 70-528… 


70-540 – TS: Windows Mobile 5.0 Applications Development


Los dispositivos móviles tienen cada vez mayor importancia dentro del entorno empresarial. Cada día ofrecen más potencia, lo que unido a la proliferación de tarifas planas de conexión y altas velocidades, hacen que cada vez sean más viables todo tipo de aplicaciones sobre estos aparatos.


Este curso le prepara para certificarse oficialmente como desarrollador en Windows Mobile 5.0.


Este examen se puso a disposición del público mundial el día 1 de marzo de 2007, por lo que serás uno de los primeros del mundo en certificarte.



Más info 70-540… 


70-431 – TS: Microsoft SQL Server 2005—Implementation and Maintenance


Este curso prepara al alumno para presentarse al examen oficial de certificación 70-431 de Microsoft en SQL Server 2005.

Al aprobar este examen el alumno poseerá el título de Technology Specialist en SQL Server 2005, siendo un especialista en la gestión, implementación y mantenimiento de SQL Server 2005.


Dirigido tanto a programadores como a administradores de sistemas, el alumno deberá poseer conocimientos básicos de bases de datos.


Más info 70-431… 



No te olvides de nuestros otros cursos on-line para formación contínua sobre desarrollo empresarial, bases de datos, etc…


Los nuevos cursos de certificación tienen todo lo que necesitas para certificarte; incluso el derecho a examen en cualquier centro examinador oficial del mundo.


En esta convocatoria las plazas están muy limitadas. ¡Apresúrate!.