lunes, 24 de noviembre de 2008

Problemas con viewsate MAC en entornos compartidos

El otro día me encontré con el siguiente error:

"Validation of viewsate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. Autogenerate cannot be used in a cluster. "

Este problema surge cuando realizas una validación de usuarios en entorno un WebFarm o Cluster y cada aplicación autogenera una machineKey como su identificador. Concretamente esta configuración provoca que si varias aplicaciones web, con validación de usuarios, conviven en el mismo servidor, al realizar una validación de usuario con el mismo sistema, se les va autogenerando la machineKey, y claro, ¿que pasaria cuando se produzca el hecho que las machineKeys coincidan? La respuesta es sencilla, el error de arriba. Así mismo, otro problema colateral con el que me encontré, era el hecho que de repente las variables de sesión se quedaban sin valor.

Después de investigar encontré estas tres soluciones:
  1. Deshabilitar ViewState en el Web.Config añadiendo lo siguiente dentro de :
    <system.web> <pages enableviewstatemac="false">
  2. Deshabilitar ViweState en las páginas añadiendo lo siguiente en la cabecera de los archivos aspx: enableViewStateMac="False".
  3. <%@ Page Language="c#" AutoEventWireup="false" Codebehind="MyPage.aspx.cs" Inherits="MyAssembly.MyPage" enableViewStateMac="False" %>

  4. Evitar que el pool cree el MachineKey para la aplicación, se le asigna uno manualmenteen el web.config. Para este punto la siguiente web los crea: http://aspnetresources.com/tools/keycreator.aspx

<machineKey validation="SHA1" validationKey="F3690E7A3143C185A6A8B4D81FD55DD7A69EEAA3B32A6AE813ECEEC" />

Configuraciones IIS

Esta semana he estado desplegando en producción un nuevo aplicativo web (a partir de ahora le llamaré portal) en un cliente. Este nuevo portal complementa a otros tres existentes, pero con la peculiaridad que estos tres portales comparten dominio, mientras que el nuevo se tenía que publicar en un dominio distinto.


Así mismo, el cliente puso otros requerimientos a la hora de desplegar el portal:


  1. Ambos portales debían ir sobre el puerto 80.

  2. El servidor donde estaría publicado el portal solo tenía una IP pública para ambos portales.


Vistos los requerimientos me puse a investigar un poco, y descubrí una serie de cosas interesantes que me gustaría compartir.


El hecho de que el nuevo portal perteneciera a un dominio distinto, me implicó crear un nuevo WebSite en el IIS. Para diferenciar completamente este nuevo WebSite del otro ya existente, creé un nuevo Application Pool, cogiendo como base el de los otros portales para que fueran iguales, y se lo asigné al nuevo WebSite.


Una vez hecho esto, se tenía que diferenciar las peticiones que iban al WebSite existente con las que iban al nuevo. Para ello utilicé la propiedad HOST HEADER de los Web Sites. Detallaré los pasos:

  1. Crear el nuevo WebSite configurándolo normalmente, eso si, cada uno de los sitios va a estar en una carpeta diferente.
  2. Una vez que tenemos todos los sitios creados. Haces botón derecho sobre el primer sitio, y en propiedades, en la solapa "Web Site", junto a la ip hay un boton "Advanced". Ahora, en la ventana de "Advanced Multiple Web Site Configuration", en la subventana "Multiple identities for this web site", seguramente vas a encontrar una linea que tiene 3 campos: ip address, tcp port, Host Header Name.

* En IP address, seguramente diga "(All Unassigned)", no hace falta cambiar eso.

* El TCP port 80.

* En Host Header Name , le pones el dominio que quieras para ese sitio ejemplo:
www.raona.com/


Repetir lo mismo con cada uno de los sitios.


Veamosló graficamente:

Beyond the PMP

Raona dentro de su plan de carrera ha apostado por dar la posibilidad a sus ingenieros a elegir en que área desean crecer y orientar su formación y su especialización en este sentido. Yo he decidido elegir la vía del Project Management ya que es algo que me ha gustado desde siempre, y por ello he decidido obtener la certificación de PMP.
Sé que muchos no habréis oído hablar del PMP, pero intentaré resumirlo en unas pocas líneas. PMP es la abreviatura de Project Management Professional, una certificación que otorga el Project Management Institute (PMI), a aquellos profesionales que demuestran un conocimiento de las best practices que propone. ¿Qué lio de siglas verdad? Lo intentaré de nuevo…

El PMI es una institución fundada en 1969 que desde esa fecha ha desarrollado un conjunto de estándares para el project managent (no penséis solo en el ámbito de la informática, si no en cualquier área donde exista un proyecto) en todo el mundo. El elemento base es la PMBOK Guide (ya va por la tercera edición), que es mundialmente reconocida y está aprobada como estándar para el project management por el American National Institute (ANSI).

Esta institución otorga una certificación a aquellos profesionales que acreditan conocimiento de las best practices expuestas por el PMI. Esto significa que el profesional certificado ha pasado un proceso de estudio y formación. Además el profesional acepta un Código de Ética que rige su forma de trabajar en su profesión y entorno.

En el camino para obtener la certificación el pasado mes de septiembre estuve en Madrid en un curso preparatorio para el examen de PMP. Este curso me ha servido para obtener los conocimientos base para poder obtener la certificación y conseguir unos créditos obligatorios (PDU’s) para ser PMP.

Así mismo, ya he superado los requisitos mínimos de experiencia profesional y de formación, y actualmente estoy a la espera de realizar el examen. Este será el paso final para ser reconocido oficialmente como PMP.

Para más información: http://www.pmi.org/

viernes, 7 de noviembre de 2008

Acceder a Oracle con SSIS

Aunque ya llevo años trabajando con SSIS, este mes he trabajado por primera vez integrando una base de datos Oracle.

La necesidad era migrar datos de un origen de datos de un ERP cuyo motor de base de datos es un Oracle, hacia un primer esbozo de DataWarehouse sobre un SQL Server 2005, utilizando procesos ETL creados con SSIS.

Mis primeras dudas eran como acceder al origen de datos Oracle que se encuentra en un servidor Linux. La verdad es que la cosa fue más fácil de lo que pensaba, gracias a un documento que encontre por internet, y que explica cómo trabajar con SSIS 2008 y Oracle 10g (aunque me yo seguí los pasos para SSIS 2005 y Oracle 9g y funcionó). Os adjunto el link:

Resumiendo el documento, para trabajar con SSIS y Oracle, simplemente se ha de instalar, en los entornos de trabajo, el cliente de Oracle con sus opciones básicas más Oracle Windows Interfaces y Oracle .Net. Una vez instalado, y configurado siguiendo los pasos del documento, se puede conectar sin problemas con Oracle desde SSIS.

jueves, 10 de julio de 2008

Integration Services - Uso de Look Up como Slowly Changing Dimension

En este post voy ha hablar de un uso que se le puede dar al componente Lookup (LKP) que me parece muy interesante y útil. Me he decidido a escribirlo porqué me ha servido de solución en muchas ocasiones y en los últimos días ha ayudado a mis compañeros de trabajo en sus proyectos.

El uso más típico del componente LKP de SSIS es para añadir datos de una tabla a los datos que estamos tratando en un flujo dentro de un Data Flow Task (DFT) en una relación 1 a 1, en otras palabras, al hacer una JOIN. Esto, unido a las diferentes posibilidades de gestión de errores que tiene el componente, nos permite hacer una gestión de valores muy completa.

Pero hay una posibilidad de utilizar este componente que me parece más interesante, y es como sustituto del componente Slowly Changing Dimension (SCD).

Yo personalmete le veo dos situaciones en las que es mejor utilizar el LKP en vez del SCD:
  • En la primera realmente no es una alternativa, sino que el SCD no funciona, y esta solución te saca del apuro. Es la situación en la que la Business Key de la tabla de destino del DFT es un Identity, cosa que el SCD no acepta. En este caso el LKP nos daría la funcionalidad que buscamos.
  • El segundo caso es en el que busquemos un procesamiento de datos más rápido, ya que fijando la cache del DFT podemos obtener un mejor rendimiento que el del SCD para volumenes de datos elevados.
Para poder hacer este uso del LKP es muy sencillo, simplemente hemos de aprovechar la gestión de errores del LKP para detectar que filas de las que nos llegan no estan en la tabla de destino y portanto hemos de insertar, y cuales hemos de tratar como existentes, y por tanto darles un trato de actualización.

La configuración del LKP es sencilla, veamosló paso a paso:
  • Paso 1: Indicar que la tabla con la que relacionar el flujo de datos que recibimos en el LKP es la de destino del proceso (igual que si aplicaramos SCD).
  • Paso 2: Indicar que queremos relacionar la tabla de destino y el flujo de datos mediante la Primary Key de la tabla de destino.
  • Paso 3: Configurar la salida de error, indicando que en caso de no encontrar coincidencia redireccione la fila erronea por la salida de error.

  • Paso 4: Crear un OLDB Destination cuya tabla sea la de destino del proceso y conectarlo con la salida de error del LKP. Esto hará que cuando el LKP no detecte coincidencia de Primary Key derive por la salida de error la fila "erronea", haciendo la misma función que la salida de New del SCD.

  • Paso 5: Crear un OLDB Command, construir la consulta SQL de update y conectarlo con la salida del LKP. De esta manera toda fila cuya Primary Key coincida con una existente en la tabla de destino irá por la salida normal del LKP e irá al OLDB Command de actualización, haciendo la misma función que la salida de actualización del SCD. En este punto podemos darle toda la funcionalidad que queramos a base de conectar OLDB Commands, pudiendo crear, por ejemplo, la misma funcionalidad que la salida Historical del SCD.

Con estos simples pasos ya tenemos un nuevo uso para el LKP. ¡Espero que os resulte tan útil como a mi!

lunes, 7 de julio de 2008

Certificado de aplicaciones en Windows Vista

Todos estamos familiarizados en ver una etiqueta en los ordenadores que compramos que nos indica que es compatible con Windows Vista. Esto nos da la certeza que si en este ordenador instalamos Windows Vista, nos funcionará correctamente y podremos trabajar con él con garantías de un rendimiento aceptable.

¿Sabíais que en software también puede obtenerse este logotipo?

Si nos remontamos a la aparición de Windows Vista, todos recordaremos los problemas que teníamos con la mayoría de aplicaciones que usamos para el día a día, ya que la mayoría no eran compatibles con esta nueva versión del sistema operativo. Todas las compañías de software corrieron a adaptar sus aplicativos a este nuevo sistema operativo y poco a poco todos pudimos volver a usar nuestros programas favoritos, pero…

¿Qué imagen nos dio todo esto? ¿Qué pensamos cada vez que nos sale un aviso de que el software no está validado por Microsoft o que no es compatible con Windows Vista?

Sé que muchos pensareis que todo es culpa de Microsoft, y su “manía” de hacer incompatible su sistema operativo con el software de toda la vida, pero esto tiene una solución que podemos aplicar al desarrollo de nuestras aplicaciones.
Hace un par de meses llegó a mí un proyecto de obtención del Logo Vista para el aplicativo de un cliente. Al principio he de reconocer que fui un poco escéptico con el tema, pero una vez acabado el proyecto con éxito, veo que tiene mucho sentido certificar aplicaciones con este logo.

¿Qué es el Windows Vista Logo Program?

Microsoft ha apostado por crear un programa que permite asegurar la fiabilidad de las aplicaciones sobre su sistema operativo. Este programa nos permite validar que nuestra aplicación va a funcionar correctamente sobre este sistema operativo.

Hay dos certificaciones, una más básica y otra más exhaustiva:

• El logotipo "Funciona con Windows Vista" es una designación de compatibilidad diseñada para fomentar la compatibilidad con Windows Vista para la generación actual de aplicaciones basadas en Windows. Para recibir esta designación, las compañías de software prueban sus aplicaciones para asegurarse de que cumplen las instrucciones del programa.

• El logotipo "Certificado para Windows Vista" es una designación de compatibilidad para aplicaciones y dispositivos que han superado un riguroso programa de pruebas en equipos que ejecutan Windows Vista. Los requisitos técnicos para esta designación se centran en cuatro áreas básicas: confiabilidad, seguridad, compatibilidad con Windows Vista y sistemas operativos futuros e instalación y desinstalación.

El primer logotipo es un proceso de validación que puede realizar la misma empresa que desarrolla el software, y solamente certifica que el aplicativo va a funcionar en Windows Vista. Para obtener el segundo logotipo la aplicación ha de pasar unos test que realiza una entidad certificadora externa designada por Microsoft, y obtenerlo garantiza además que el aplicativo va a funcionar correctamente en Windows Vista, va a aprovechar el 100% de sus características, va a tener un excelente rendimiento, va a ser de uso fácil para el usuario y va a proporcionar una experiencia de usuario óptima.

¿En qué nos puede ayudar como desarrolladores?

En mi opinión esta filosofía nos ayuda con la calidad de nuestras aplicaciones. Cuando vamos a un cliente y le decimos que nuestra aplicación ha sido certificada y le enseñamos el logotipo de Microsoft le da seguridad y tenemos un sello de calidad. Por otro lado, el simple hecho de hacer internamente, por los propios equipos de desarrollo, los test de “Funciona con Windows Vista” hace que estemos seguros que estamos haciendo las cosas bien.

Para más información:
http://support.microsoft.com/kb/933305

Aquí podréis encontrar el listado de aplicaciones que han apostado por este programa de certificación.

Un poco de propaganda de mi empresa:
http://www.raona.com/Actius/WindowsVistaLogo/tabid/300/Default.aspx

Aquí podréis encontrar el caso de éxito de mi empresa y la apuesta que estamos haciendo por aplicar este valor de calidad en nuestros proyectos.

lunes, 30 de junio de 2008

Mi tercer MCTS

Aunque un poco tarde debido a una pequeña punta de trabajo, os anuncio que el pasado 30 de Mayo me convertí en MCTS de WebServices Applications. Parece mentira pero ya hace un mes.

Para mi obtener esta certificación ha sido algo duro, ya que he tenido que hacer el examen a base de leer documentación, al solo haber trabajado en un proyecto con WebServices en 2.0.

Ahora espero que antes de verano os pueda anunciar que me he convertido en MCPD. Ya me estoy leyendo el libro que hay para preparar el examen 70-549: PRO: Designing and Developing Enterprise Applications by Using the Microsoft .NET Framework, ya os informaré que tal.

jueves, 8 de mayo de 2008

Actualizándome a 2.0

Uno de mis objetivos de este año es actualizar mis certificaciones Microsoft en .Net Framework de 1.1 a 2.0, lo que implicaría convertirme en Microsoft Certified Professional Developer (MCPD).

Ya sé que estoy un poco anticuado, ya que ya están disponibles los exámenes beta de .Net Framework 3.5, y se anunciaba para Febrero la salida de los oficiales, pero hasta donde yo sé, aún no es así. Lo que sí sé seguro, es que para las nuevas certificaciones se abandona la orientación al tipo de aplicación (Web, Windows, Distribuida) y se orientará a las tecnologías basadas en .Net Framework 3.5 como WPF, WWF, WCF, ADO.NET 3.5 y ASP.NET 3.5. Para los interesados en lo que sucederá con las certificaciones actuales, lo que se sabe es que habrá 6 nuevos exámenes para las certificaciones MCTS y los exámenes son los siguientes:


En este link hay un video explicativo del nuevo sistema de certificaciones para .Net Framework 3.5, creo que con él vereis claramente el nuevo sistema:


Volviendo al tema de mis certificaciones, la cosa pinta bien, ya que el año pasado inicié este objetivo aprobando la primera certificación necesaria, 70-536: TS: Microsoft .NET Framework 2.0 - Application Development Foundation; y este año ya he obtenido la titulación de Microsoft Certified Technology Specialist (MCTS) en aplicaciones Web y Windows, después de aprobar las certificaciones 70-528: TS: Microsoft .NET Framework 2.0 - Web-Based Client Development y 70-526: TS: Microsoft .NET Framework 2.0 - Windows-Based Client Development respectivamente.

Mi próximo objetivo es ser MSCTS en aplicaciones distribuidas, aprobando la certificación 70-529: TS: Microsoft .NET Framework 2.0 - Distributed Application Development, el próximo 30 de Mayo. Este objetivo pinta más complicado, ya que aunque he trabajado en proyectos de aplicaciones distribuidas, no es el apartado que más conozco. ¡Ya informaré del resultado!

lunes, 5 de mayo de 2008

¡Por fin mi primer post!

Nunca pensé que costara tanto escribir algo en un lugar público. Siempre me he nutrido de los blogs de otra gente, aprendiendo tecnologías, viendo las últimas novedades de productos, o incluso sintiéndome identificado con el sufrimiento de otros al trabajar con ciertos productos que no mencionaré para evitar criticar en mi primer post; pero siempre que me he puesto me he puesto delante del teclado para escribir algo yo, siempre me he echado atrás. Pero hoy he dicho "¡BASTA!", y aquí está mi primera contribución a este inaugurado blog.¡Espero escribir posts más útiles próximamente!