La herencia de los Web.config, los deployment y el tag remove

Anteriormente, hemos visto, que es útil y una buena práctica, el soportar la herencia de los web.config de tus apliaciones web.

Puede ser muy útil, tener un web.config padre y una serie de web.config hijos, donde se encapsule la configuración de cada una de tus aplicaciones ya que así los deployment y mantenimientos son más sencillos y sobre todo, así mantienes todas tus aplicaciones de una forma más compacta.

Eso si, siempre se pueden dar casos, donde nos encontremos que nuestro web.config esta herendado de otro, y el web.config padre, hace referencia a elementos que nos necesitamos, lo cual nos va a generar un problema, pero tranquilos, esto es muy fácil solucionarlo gracias al tag remove.

El tag remove, se va a encargar de “eliminar” las referencias del web.config que no necesitemos.

Un ejemplo de su uso sería el siguiente:

<httpModules>
<remove name="HttpExceptionHandlerPipeline" />
<remove name="HttpsSwitcherPipeline" />
<remove name="RedirectModule" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>

Sencillo y útil, como todo debería de ser. Os dejo, pero con vosotros se quedan los Vampire Weekend. Geniales.

La herencia de web.config y los deployment.

Es interesante ver como por norma general e independientemente del paso del tiempo, los deployment han sido y son tareas que sin tener porque, se complican y llegan a rayar lo absurdo.

Generalmente cuando estamos en un proyecto, disponemos de distintos entornos, conforme vamos avanzando en el ciclo de vida del desarrollo del software, vamos desplegando la aplicación en el entorno de desarrollo, preproducción etc. y en el momento que tenemos que poner la aplicación en producción siempre surge alguna cosa.

Si el proyecto en el que nos encontramos trabajando es muy grande, es una buena práctica partirlo en porciones más pequeñas, así podemos trabajar de una forma más desacoplada y posteriormente el deployment también podemos conseguir que sea más sencillo.

Supongamos que estamos en un proyecto que es muy grande, y que en este momento, estas desarrollando pequeñas piezas, que sin formar parte del core del negocio que intenta resolver, lo complementa.

Una buena solución es trabajar en distintas soluciones de manera que una funcionalidad x la tienes totalmente encapsulada en la solución que le corresponde. Y así, cuando llega el momento de hacer el deployment, puedes desplegar el core de tu negocio en un Web Site, y todas las aplicaciones satélites pueden ser virtual directories dentro de tu web site principal.

A la hora de hacer el deployment, cuando tenemos un Web Site que contiene n directorios virtuales, podemos observar como el web.config de los directorios virtuales, heredan del web.config del Web Site, de esta manera, puedes dejar toda la configuración común de tu app en el web.config de la aplicación que implementa el core de tu negocio, y toda la configuración de tus aplicaciones satélites en el web.config de cada una de ellas (en su respectivo virtual directory), así consigues tener la configuración de cada pieza aislada y más controlada.

Seguramente esta práctica, genera un trabajo de configuración y mantenimiento mayor, pero merece la pena por el hecho de tener todo más aislado y desacoplado.

Hoy mientras escribía este post, he estado escuchando a Ticket, el grupo de mi colega Maiki, ya que mañana tocan aquí en Madrid.

Dependency Properties y Attached Properties, ¿Qué son?

Cuando estas empezando a aprender Silverlight o Windows Presentation Foundation (aka WPF) y las tecnologías lo hacen posible como por ejemplo XAML, empiezas a encontrar algunos conceptos nuevos que ha introducido ASP.NET 2008 y el Framework 3.5.

WPF, introduce un nuevo uso de las propiedades mucho más inteligente y sofisticado, estas son las Dependency Properties y las Attached Properties, dos tipos nuevos de propiedades (o un tipo y medio por lo menos) que nos proporciona el Framework y que nos vamos a cansar de usar cuando nos toque crear interfaces (y lo que no son interfaces) con XAML.

Dependency Properties

Una Dependency Property, es un tipo especial de propiedad que devuelve una propiedad .NET y además el valor de la susodicha Dependency Property, depende de otros elementos, por eso no es suficiente con una propiedad normal.

Las características de las Dependency Properties son: Sigue leyendo

Linq: Los Operadores OrderBy y OrderByDescending.

Anteriormente ya hablamos de varios operadores de linq y ahora volvemos al tema para ver dos nuevos operadores que seguramente son de los más usados.

Para los que no sepan que es linq, les recomiendo leer ¿Qué es linq?, para los demás sigamos adelante.

En este post, vamos a ver dos operadores y como he dicho seguramente van a ser de los más usados, estos son:

  • OrderBy
  • OrderByDescending

Como su nombre indica, estos operadores, lo que nos van a permitir es ordenar el conjunto de datos de forma ascendente (OrderBy) o descendente (OrderByDescending).

Antes de meternos en faena, decir que vamos a usar como fuente de datos un xml con información sobre países, el mismo que usamos en el post “Operadores de Linq: Como usar los operadores Take, StartsWith, EndsWith y Contains”.  El xml tiene este aspecto: Sigue leyendo

Trabajando con Ajax y las Microsoft Ajax Library (ScriptManager, UpdatePanel etc…) e IFrames: Como resolver el error “Access Denied”.

No es extraño, encontrarse con escenarios de integración de aplicaciones (hablamos de aplicaciones Web) donde tenemos que integrar nuestras apps con aplicaciones de terceros.

Una solución muy extendida, es hacerlo con la ayuda de IFrames, donde en el cargamos nuestra aplicación en un sitio de terceros, de manera que la aplicación de terceros (donde integramos la nuestra) está en un servidor y nuestra aplicación esta en otro servidor.

Si nuestra aplicación, está trabajando con Ajax (y con ScriptManager, UpdatePanel etc…), seguramente cuando la ejecutemos en Internet Explorer (solo lo he probado con IE7 aunque tengo sospechas de que ocurrirá también con IE6) vamos a recibir un error cuya descripción es “Access Denied”.

¿Qué es el ScriptManager?

El ScriptManager, es un control de servidor que nos proporciona el Framework que nos va a gestionar  la descarga de los archivos necesarios de JavaScript  para poder trabajar con Ajax de forma sencilla.

Además, el ScriptManager, también inicializa valores del JavaScript etc… Así que tendremos que estar pendientes del uso que estamos haciendo de este para poder replicar su comportamiento.

¿Qué produce el error?

El error, lo produce la función getLocation del archivo MicrosoftAjax.js. El archivo MicrosoftAjax.js es uno de los que nos descarga el ScriptManager.

La función getLocation determina las coordenadas relativas de un pixel de un elemento del DOM respecto a la esquina superior izquierda del navegador. Como los distintos navegadores, esto lo calculan de distinta forma, esta función hace distinción del browser (algunos tienen en cuenta el scroll otros no etc…) que está ejecutando la página (he aquí la razón por la que únicamente falla en Internet Explorer) así que nos encontramos con que la parte de código que calcula las coordenadas para Internet Explorer, no lo hace demasiado bien.

¿Cómo solucionar el error?

Pues bien, dado que tenemos localizada la razón por la que se produce el error, la solución es sencilla, tenemos hacer un wrapper del código que produce el susodicho error. Sigue leyendo

El Service Pack 1 (SP1) de Visual Studio 2008 y ASP.NET 3.5, está en la calle.

Pues si amigos míos, ya tenemos disponible el Service Pack 1 de Visual Studio 2008 y ASP.NET 3.5 y los puedes descargar desde los siguientes enlaces:

Como vimos anteriormente este Service Pack viene repletito de novedades y seguro que nos va a aportar muchas mejoras para hacernos la vida más fácil. Sigue leyendo

Como eliminar el ScriptManager de nuestra página y que el desarrollo Ajax siga funcionando igual.

En este post, vamos a ver cómo eliminar el ScriptManager de nuestra página (y porque eliminarlo) y que todo nos siga funcionando ok, sin que esto sea una experiencia traumática. También veremos que es el ScriptManager y cuáles son sus funciones.

¿Qué es el ScriptManager y para qué Sirve?

El ScriptManager, es un control que nos proporciona el Framework y que nos permite trabajar de forma sencilla con Ajax (Asynchronous JavaScript And XML). Este se encarga de descargar los archivos javascript necesarios para trabajar con Ajax, renderizar el javascript necesario en función de un contexto, crear las llamadas XmlHttpRequest, llamadas a Web Services etc.

Al final lo que intenta, es que trabajar con Ajax sea sencillo y rápido, de manera que con un pequeño esfuerzo podamos obtener unos muy buenos resultados, haciendo él el “trabajo sucio”.

¿Qué ganamos si eliminamos el ScriptManager de una página?

Y ¿si el ScriptManager se dedica a facilitarnos la vida, porque vamos a querer eliminarlo? pues he aquí las razones: Sigue leyendo

Operadores de Linq: Como usar los operadores Take, StartsWith, EndsWith y Contains

Volvemos a Linq dado que cuanto más lo uso más me gusta  y como ya dije anteriormente Linq seguramente es la mayor mejora que presenta ASP.NET 3.5 y por ello, hoy quería hablar de los operadores que nos aporta el Framework para poder hacer nuestras consultas más precisas.

Los operadores que vamos a ver hoy son:

  • Take
  • StartsWith
  • EndsWith
  • Contains

Estos operadores son equivalentes a operadores de SQL. Estos operadores son

  • Top
  • LIKE

Sigue leyendo

Generando un hash sha1 con ASP.NET y C# de forma sencilla y simple.

SHA1 es un algoritmo criptográfico perteneciente a la familia de algoritmos criptográficos SHA (Secure Hash Algorithm o Algoritmo de Hash Seguro) de la Agencia Nacional de Seguridad de Estados Unidos y desarrollada por el NIST (National Institude of Standards and Technology).

El primero de estos algoritmos fue desarrollado en el año 93 y fue el SHA (ahora conocido como SHA-0), 4 años después, fue sustituido por el SHA1 y posteriormente han aparecido SHA-224, SHA-256, SHA-384 y SHA-512 y todos son conocidos como SHA-2.

En 1998, se encontró una vulnerabilidad en SHA-0 pero esta no afectaba a SHA1 del cual no se ha encontrado ningún ataque efectivo. En 2004, fueron publicados una serie de ataques sobre hash parecidos al que genera SHA-1 planteándose por lo tanto dudas sobre la seguridad que este aporta.

Por medio del SHA1, vamos a obtener un hash sobre un conjunto de datos. Un hash viene a ser un conjunto de datos obtenido en base a otros.

Este tipo de algoritmos, se usa para certificar que una secuencia de datos no ha sido alterada, ya que si se modifica el valor del hash, implica que esa información ha sido alterada.

SHA1 produce una salida de 160 bits de un mensaje que puede tener un tamaño máximo de 264 bits y se basa en principios similares a los usados por Ronald Rivest (del MIT) para desarrollar los algoritmos MD4 y MD5.

¿Cómo podemos obtener un hash mediante el SHA1?

Pues vamos a verlo, la verdad es que con c# es sencillo dado que el Framework (como siempre) nos proporcionan unas clases para realizar esto. Sigue leyendo

Generando un hash MD5 con ASP.NET y C# de forma sencilla y simple.

El MD5 es un algoritmo criptográfico de 128 bits. Fue desarrollado por Ronald Rivest (profesor del MIT) en el año 91 como sucesor del MD4 y pesar de que en el año 96 fue anunciada una colisión de hash planteándose por lo tanto dudas sobre su futuro, a día de hoy es muy usado.

Por medio del MD5, vamos a obtener un hash sobre un conjunto de datos. Un hash viene a ser un conjunto de datos obtenido en base a otros.

Este tipo de algoritmos, se usa para certificar que una secuencia de datos no ha sido alterada, ya que si se modifica el valor del hash, implica que esa información ha cambiado.

El resultado obtenido por medio de un MD5 es una cadena hexadecimal de 32 dígitos.

¿Cómo podemos obtener un hash mediante el MD5?

Pues vamos a verlo, la verdad es que generar un hash MD5 con C# es sencillo dado que el Framework (como siempre) nos proporcionan unas clases para realizar esto. Sigue leyendo