Un paseo por las nubes

Un blog acerca de Cloud Computing...
¡Vuelve el Megathon 2013!

Por segundo año consecutivo, tendrá lugar el Megathon Windows, un hackathon que se celebra de manera simultánea en varias ciudades, donde tendrás la oportunidad de crear apps para Windows 8 y Windows Phone, aprender y conocer a otros programadores y ganar fabulosos premios.

Además como novedad, este año hemos preparado una serie de cursos y webcasts gratuitos de desarrollo de apps para Windows 8 y Windows Phone previos al evento para que puedas empezar a prepararte a fondo para el gran día.

¡Accede a la web del Megathon Windows para apuntarte a los cursos y no olvides registrarte en alguna de las ciudades que ya tenemos confirmadas!

¡Empieza a prepararte! ¡Contamos contigo!

[DNN Azure Accelerator] Le damos la bienvenida a la Alta Disponibilidad

high_availabilityUna de las características más solicitadas en el DotNetNuke Azure Accelerator es la posibilidad de poder hacer despliegues en alta disponibilidad (añadiendo dos o más roles) y que además no existan problemas de recuperación en caso de que el acceso a los contenidos almacenados en el VHD sea interrumpido. Si bien en la actualidad se podían hacer despliegues de más de un servidor para servir los contenidos (modo webfarm), en el caso de que el servidor que montaba la unidad VHD cayera por algún motivo –como que Microsoft hiciera un mantenimiento planeado haciendo un upgrade del cloud service- podía acabar en que el site dejara de estar disponible.

Todo esto tiene su raíz en la exclusividad que mantiene sobre el blob el role que monta el VHD, a través del mantenimiento de leases sobre el mismo, no permitiendo a los demás roles montarlo en modo lectura/escritura.

Nuevas características en el DNN Azure Accelerator

Antes de comenzar a detallar cómo funciona el nuevo sistema de “competición por el lease”, echemos un vistazo a las nuevas características implementadas en el Accelerator desde su última versión y que he ido añadiendo a lo largo de los últimos meses:

  • Solución actualizada al Azure SDK 1.8 (October 2012)
  • Modificado el sistema operativo predeterminado de los paquetes a OSVersion=3 (Windows Server 2012, IIS 8)
  • Añadido soporte para servicio FTP (activo y pasivo)
  • Corregida la causa por la que en determinadas ocasiones el site no se iniciaba correctamente tras reiniciar el role (ver este enlace para más información)
  • Añadido nuevo paquete con soporte para co-located caché
  • Añadido soporte de pre-carga del sitio y modo de inicio del appPool en AlwaysRunning, características de IIS8 (ver este enlace para más información)
  • Arquitectura modificada añadiendo soporte para Alta Disponibilidad

Antes de empaquetar la nueva versión, voy a realizar algunos cambios en la interfaz de usuario para acomodar las nuevas opciones de configuración como las del servicio FTP, etc.

Alta Disponibilidad: compitiendo por el lease

A la espera de que Microsoft saque la solución definitiva a este problema de leases sobre los VHD, la nueva implementación realizada en el DNN Azure Accelerator minimiza estos efectos para estar dentro de los márgenes del SLA de alta disponibilidad de Windows Azure.

La solución está basada en la actualización del post de Dinesh Haridas -artículo en el que está inspirado el DNN Azure Accelerator- en el que se introduce una aproximación a la alta disponibilidad con una técnica de competición por el VHD.

Por simplificación, centremos el problema de la alta disponibilidad en las operaciones alrededor del VHD donde residen los contenidos del site. Estas operaciones serán realizadas entre dos roles: SMBServer, que actúa como el servidor de contenidos; SMBClient, que actúa como servidor que se conecta a la unidad compartida por el servidor de contenidos.

El resumen de las operaciones realizadas en el role que comparte los contenidos es:

  • SMBServer (1 o más instancias)
    • Cada X segundos (en el evento OnRun), intenta montar el VHD (Compete for the lease)
      • Si tiene éxito:
        • comparte la unidad con un “NET SHARE”
        • Cada X segundos sigue comprobando que tiene el lease. Si no lo tiene, elimina el share y vuelve al principio

Tal y como se observa, todos los roles que actúan como servidor de ficheros están continuamente compitiendo por el lease del VHD. El lease actual, que se mantiene durante 60seg por el driver del servidor que monta con éxito el VHD, asegura que la unidad siga estando en posesión del mismo servidor mientras sea posible. Por este motivo, en caso de caída del role que comparte los contenidos, la recuperación completa toma entre 60 y 90seg. Si tenemos en cuenta que ésto sólo ocurre cuando actualizamos el servicio –o cuando Microsoft realiza una operación de mantenimiento, normalmente una vez cada 2 o 3 meses-, si bien no es perfecto, entra dentro de los márgenes del SLA de Azure.

El resumen de las operaciones realizadas en el role que actúa como cliente es:

  • SMBClient (1 o más instancias)
    • Cada X segundos (en el evento OnRun), intenta mapear una unidad de red con el share del role SMBServer, iterando sobre todas las instancias del mismo
      • Si tiene éxito:
        • Cada X segundos escribe en un fichero de log en la carpeta “\logs”. Si ocurre un error al escribir dicha entrada, elimina la unidad mapeada y vuelve al principio

En el caso del servidor SMBClient, se hacen varios reintentos de escritura en el log antes de comenzar de nuevo el proceso de mapeo para evitar falsos positivos.

AzureHADemo

En el archivo adjunto está la solución simplificada que sirve de demostración por si a alguien le interesan los detalles.

  • AcceleratorHADemo.zip (334Kb) – Descargar

Implementación en el Accelerator

La implementación final en el Accelerator también está disponible en CodePlex. Cabe destacar las siguientes características en la implementación final:

  • El código de creación del site en el IIS se ha movido justo después del intento exitoso de mapeo de la unidad de red en el webrole
  • Existen tres cloud services distintos dentro de la solución:
    • DNNAzureSMB: mantiene worker roles (SMBServer) y webroles (DNNAzure) separados para cada operación. Si bien lo normal es usar el menor número de servidores posible, hay escenarios donde, por rendimiento, no se desea sobrecargar a un webrole con las tareas de servir también los archivos al resto de instancias. Es por ello que se sigue manteniendo esta solución.
    • DNNAzureSingle: al desplegar este cloud service, los webroles (DNNAzure) actúan también como servidores de contenidos compitiendo por el lease del VHD. Para ello se mantienen dos threads: uno para competir por el lease y realizar las tareas propias del SMBServer y otro para realizar el mapeo de red y las tareas propias del SMBClient. Este será normalmente el paquete a desplegar en la mayoría de los escenarios.

Aún queda una problemática por solucionar, y es el escenario donde se usa FTP o WebDeploy y has desplegado más de una instancia de los webroles. Esto es debido a que estos protocolos requieren afinidad a nivel de protocolo de comunicaciones y la implementación actual del Load Balancer de Azure no permite especificar la misma. Como “workaround” para esta incidencia –y hasta que Microsoft lo solucione a nivel de Load Balancer- la solución pasaría por añadir un tercer webrole para estos servicios que requieren afinidad y desplegar sólo una instancia del mismo. 

Conclusión

Con esta versión se soluciona el problema de alta disponibilidad en el DNN Azure Accelerator así como el problema de actualización del servicio, ya esté en alta disponibilidad como si no, con lo que será una actualización recomendada para todos los despliegues que actualmente estén usando el DNN Azure Accelerator.

En breve realizaré un empaquetado y estará disponible como descarga en CodePlex. Si tienes alguna sugerencia, no olvides dejar tus comentarios, ya sea en este mismo blog o como una entrada en el área de discusiones de CodePlex.

Un saludo y Happy Coding!

Cómo eliminar registros de la tabla de trazas en Azure

Dentro de las buenas prácticas a la hora de implementar un cloud service en Azure, ya se trate de un webrole o un worker role, es la de configurar la transferencia de datos de diagnóstico a Azure Storage para poder ver cómo se está comportando nuestro servicio. En el artículo “Enabling Diagnostics in Windows Azure” se detalla paso a paso cómo habilitar cada uno de los tipos de diagnóstico.

Una vez configuradas las fuentes de datos de diagnóstico –IIS logs, Windows Events logs, etc.-, los datos son transferidos a Azure Storage en ciclos de X minutos según hayamos configurado. Uno de estas fuentes de datos son los Windows Azure logs, conteniendo los mensajes enviados a través de operaciones de traza (“Trace.WriteInformation”, etc.), y yendo a parar a la tabla “WADLogsTable” en Azure Storage.

WADLogsTable

Esta información es una de nuestras primeras herramientas de diagnóstico en la que podemos escribir información de traza. Personalmente también añado un listener para tener la misma información en el Event Viewer de mi aplicación ya que así no tengo que esperar al mínimo de 1 minuto de transferencia a Storage, accediendo al mismo a través de RDP.

Y si bien en el caso del visor de sucesos podemos indicar diversos métodos de eliminación automática de sucesos –por fecha, por tamaño en Mb, etc.-, no existe una opción similar para eliminar esta información de forma automática de la tabla WADLogsTable de Azure Storage. Es cierto que el almacenamiento de Azure Storage es muy económico, pero cuando vas acumulando información de traza, es muy probable que los mensajes que fueron generados hace varios meses o años atrás deje de ser relevante, y haya que realizar algún mantenimiento en la misma sin perder los últimos datos relevantes (vamos, sin eliminar la tabla completamente).

De este modo, una de las opciones que tenemos es la de ir eliminando registros de la tabla a través de algún filtro, algo que podemos hacer programáticamente o a través de uno de los comandos Powershell disponibles en el conjunto de Windows Azure Management Cmdlets.

Instalando Windows Azure Management Cmdlets

InstallWPILa forma más sencilla de instalar estos comandos de PowerShell es a través de Web Platform Installer. Siguiendo este enlace (http://go.microsoft.com/?linkid=9811175&clcid=0x409) se iniciará la instalación de paquete en cuestión.

Si lo que deseas es automatizar la instalación de estos Cmdlets dentro de tu instancia de Windows Azure, puedes usar la herramienta de línea de comandos de Web Platform Installer con una línea de comandos como la siguiente (visita mi post anterior Configurando Web Platform Installer y WebDeploy en un Azure WebRole para ampliar información):

   1: ~dp0WebPICMD.exe /Install /Products:WindowsAzurePowerShell /AcceptEULA

Realizando mantenimiento de WADLogsTable

Una vez instalados los Cmdlets, abrimos la consola de Windows Azure PowerShell. Para ello, buscamos en el menú de inicio el acceso directo para iniciarla.

WAPowerShell

Una vez iniciada la consola de comandos, procedemos a buscar la ayuda del Cmdlet para realizar mantenimiento de esta tabla, escribiendo “help Clear-WindowsAzureLog”:

PS C:\> help clear-windowsazurelog
 
NAME
    Clear-WindowsAzureLog
 
SYNOPSIS
    Removes Windows Azure trace log data from a storage account.
 
SYNTAX
    Clear-WindowsAzureLog [-DeploymentId <String>] [-From <DateTime>] [-To <DateTime>] [-StorageAccountName <String>]
    [-StorageAccountKey <String>] [-UseDevelopmentStorage] [-StorageAccountCredentials
    <StorageCredentialsAccountAndKey>] [<CommonParameters>]
 
    Clear-WindowsAzureLog [-DeploymentId <String>] [-FromUtc <DateTime>] [-ToUtc <DateTime>] [-StorageAccountName
    <String>] [-StorageAccountKey <String>] [-UseDevelopmentStorage] [-StorageAccountCredentials
    <StorageCredentialsAccountAndKey>] [<CommonParameters>]
 
DESCRIPTION
    The Clear-WindowsAzureLog cmdlet clears trace log data exported by Windows Azure Diagnostics to the WADLogsTable
    of the specified storage account.A subset of the data available can be removed by specifying a period of time for
    which to clear data.
 
RELATED LINKS
    Get-WindowsAzureLog
    Set-WindowsAzureLog
 
REMARKS
    To see the examples, type: "get-help Clear-WindowsAzureLog -examples".
    For more information, type: "get-help Clear-WindowsAzureLog -detailed".
    For technical information, type: "get-help Clear-WindowsAzureLog -full".
    For online help, type: "get-help Clear-WindowsAzureLog -online"

De este modo, un ejemplo para eliminar todas las entradas anteriores al 20 de noviembre de 2012 en DevFabric sería algo así:

PS C:\> Clear-WindowsAzureLog -ToUtc 2012-11-20T00:00:00 -UseDevelopmentStorage
47 record(s) were deleted in the 'WADLogsTable' table.

Como véis, muy simple. De hecho, una buena idea para automatizar esta tarea sería:

  1. Automatizar la instalación de los Cmdlets en el role con la herramienta de línea de comandos de WPI (ver apartado anterior)
  2. Crear una tarea programada en el role startup que llame al cmdlet de powershell para eliminar entradas anteriores a X días

Para no inventar nada nuevo respecto a la creación de tareas programadas, la mejor forma es utilizar el propio planificador de tareas del sistema dentro del mismo role. Sin embargo, para no alargar más esta entrada, lo veremos en el próximo “capítulo”.

Un saludo y Happy Coding!

Cómo desencriptar una password de RDP de Azure olvidada

password-decrypting-600x394¿Alguna vez te ha pasado que has olvidado la contraseña que pusiste al publicar tu servicio hospedado en Azure y ahora no te puedes conectar por RDP?

Actualmente, hay una solución muy sencilla –y recomendada-, que es volver a restablecer la contraseña a través del portal de Windows Azure, siguiendo los pasos siguientes:

  1. Acceder al portal de Windows Azure
  2. Ir al servicio hospedado e ir a la sección “Configurar”
  3. Hacer click en el botón “Remoto” de la barra de herramientas inferior
  4. Restablecer la contraseña introduciéndola en los campos solicitados, reconfigurando así las credenciales del usuario RDP.

ResetPassword

Esto cambiará el estado del role a “Actualizando” y al cabo de unos minutos ya podremos acceder con la nueva contraseña.

Si bien esta operación restablece correctamente los credenciales, a veces no nos conviene por un motivo u otro realizar este cambio. Así que aquí va el truco siguiente.

Desencriptar una contraseña RDP olvidada de Windows Azure

Para poder desencriptar la contraseña olvidada necesitamos:

  • Tener la cadena de texto de la contraseña encriptada
  • Tener instalado en el equipo local el certificado con la que fue encriptada

La contraseña encriptada se almacena en el archivo .cscfg con el que fue desplegado tu servicio, si bien éste puede ser distinto si alguien la ha modificado siguiendo el método anterior. Para asegurarnos de tener la última contraseña, puedes seguir los pasos siguientes:

  1. Acceder al portal anterior de Windows Azure a través de la URL https://windows.azure.com (te solicitará tus credenciales) y luego mostrará la versión anterior del portal en Silverlight
  2. Ir al servicio en cuestión y seleccionar el despliegue. En la parte derecha aparecerán las propiedades del mismo con los valores actuales
  3. Copiar al portapapeles el valor de la propiedad “Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword”

PasswordEncripted

Ahora que tienes la contraseña, puedes usar el certificado almacenado en tu almacén de certificados local para desencriptarla, del mismo modo que hace el agente de RDP de Windows Azure para crear las credenciales en el role startup.

El código para ello sería la función siguiente:

   1: private static string DecryptPassword(string encryptedPassword)
   2: {
   3:     if (string.IsNullOrEmpty(encryptedPassword))
   4:     {
   5:         throw new ArgumentNullException("encryptedPassword");
   6:     }
   7:     SecureString secPassword;
   8:     try
   9:     {
  10:         var encryptedBytes = Convert.FromBase64String(encryptedPassword);
  11:         var envelope = new EnvelopedCms();
  12:         envelope.Decode(encryptedBytes);
  13:         var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
  14:         store.Open(OpenFlags.ReadOnly);
  15:         envelope.Decrypt(store.Certificates);
  16:         char[] passwordChars = Encoding.UTF8.GetChars(envelope.ContentInfo.Content);
  17:         secPassword = new SecureString();
  18:         foreach (var character in passwordChars)
  19:         {
  20:             secPassword.AppendChar(character);
  21:         }
  22:         Array.Clear(envelope.ContentInfo.Content, 0, envelope.ContentInfo.Content.Length);
  23:         Array.Clear(passwordChars, 0, passwordChars.Length);
  24:         secPassword.MakeReadOnly();
  25:     }
  26:     catch (CryptographicException cex)
  27:     {
  28:         throw new SecurityException("Unable to decrypt password. Make sure that the cert used for encryption was uploaded to the Azure service", cex);
  29:     }
  30:     catch (FormatException fex)
  31:     {
  32:         throw new SecurityException("Encrypted password is not a valid base64 string", fex);
  33:     }
  34:  
  35:     return GetUnsecuredString(secPassword);
  36: }
  37:  
  38: private static string GetUnsecuredString(SecureString secureString)
  39: {
  40:     if (secureString == null)
  41:     {
  42:         throw new ArgumentNullException("secureString");
  43:     }
  44:  
  45:     IntPtr ptrUnsecureString = IntPtr.Zero;
  46:     try
  47:     {
  48:         ptrUnsecureString = Marshal.SecureStringToGlobalAllocUnicode(secureString);
  49:         return Marshal.PtrToStringUni(ptrUnsecureString);
  50:     }
  51:     finally
  52:     {
  53:         Marshal.ZeroFreeGlobalAllocUnicode(ptrUnsecureString);
  54:     }
  55: }
  56:  

Adjunto una solución con el código de ejemplo por si alguno le interesa.

Un saludo y happy coding!

[Evento] Lanzamiento de Visual Studio 2012 con TenerifeDev

Seguimos en modo metralleta, y aprovechando la movida realizada desde MadridDotNet no queríamos ser menos. Así que el el próximo 9 de Noviembre desde TenerifeDev vamos a hacer un evento para festejar el lanzamiento de Visual Studio 2012, con una serie de charlas a modo de píldoras informativas y finalizando con cervezas en algún bar de la Heraclio.

logoRegistro

  • Evento MSDN: Lanzamiento de Visual Studio 2012 con TenerifeDev
  • Fecha: 9 de Noviembre de 2012, de 17:00 a 20:00
  • Lugar: Aulas de Fundación Empresa Universidad de la Laguna (FEULL)

Regístrate aquí

Agenda:

En la parte que nos toca a César y a mí, haremos un repaso de la evolución de ASP.net a WebAPI, viendo con ejemplos el nuevo paradigma de programación de APIs orientadas a su consumo por páginas web. Y como no podía ser menos, aprovechando la salida de DotNetNuke 7.0, que facilita el desarrollo de WebAPIs integradas con DotNetNuke (i.e. autenticación integrada), veremos algún ejemplo de cómo implementar un WebAPI en DNN para luego consumirlo en otra aplicación cliente, como puede ser desde una app Windows 8.

Un saludo y Happy Coding!

¡Ya disponible DotNetNuke Azure Accelerator 6.3!

DotNetNukePoweredWADesde hace unos instantes ya está disponible en CodePlex la nueva versión 6.3 del asistente de despliegue de DotNetNuke sobre Windows Azure en modalidad PaaS. En esta nueva versión hay una serie de nuevas características muy interesantes así como la corrección de ciertas incidencias que han surgido desde el último empaquetado.

Una de las nuevas características más interesantes y que más juego van a dar desde el punto de vista administrativo es el soporte de WebDeploy sobre las instancias de nuestros sitios web desplegados sobre Azure PaaS. Te recomiendo echar un vistazo a esta entrada de mi blog para más información.

Por supuesto, si eres uno de los afortunados que esta semana se van a dar un salto al DNN World Conference 2012 en Orlando, no puedes dejar pasar la oportunidad de ver estas y otras características en las sesiones dedicadas al despliegue y funcionamiento de DotNetNuke sobre Windows Azure de manos de Joe Brinkman y Aaron Hayon.

Descargar DNN Azure Accelerator 6.3

Nuevas características

  • Añadido soporte SMTP: Añadida una startup task para configurar el servicio SMTP en los webroles. Ahora puedes usar LOCALHOST como servidor SMTP eliminando la necesidad de usar un servidor SMTP de terceros
  • Añadida característica "post-install" addons: si especificas en el archivo de configuración del servicio una Url apuntando a un fichero .zip, después de que el webrole se haya desplegado exitosamente éste es descargado y descomprimido en la carpeta de contenidos de DotNetNuke manteniendo la misma estructura de carpetas y archivos y sobreescribiendo los contenidos. Esta característica es muy útil en escenarios donde se quiere añadir de manera automatizada diferentes ficheros, dependencias, etc. a una instalación de DotNetNuke. Úsala a tu propia discreción
  • Añadido soporte SSL: si bien el asistente no incluye un paso para configurar esta característica, el paquete de servicio lo soporta completamente. Para configurar manualmente SSL en tu fichero de configuración, por favor lee este hilo http://dnnazureaccelerator.codeplex.com/discussions/359504
  • Añadido soporte Web Platform Installer: se ha agregado una nueva tarea de inicio en los webroles para habilitar la instalación de productos y dependencias a través de WebPI, como MVC3, WebDeploy, etc.
  • Añadido soporte WebDeploy: se ha añadido una nueva casilla de verificación en el paso de configuración de Escritorio Remoto para poder habilitar WebDeploy. A través del uso de la nueva característica de Web Platform Installer, al habilitar WebDeploy –nota que habilitar esta característica incremente cerca de 10 minutos el despliegue de las VM- puedes acceder a tu sitio usando herramientas como WebMatrix o otras herramientas de línea de comandos como la propia de WebDeploy para copiar y/o modificar ficheros o crear y restablecer tus copias de seguridad.

Correcciones

  • Modificada la manera de refrescar las suscripciones vigentes en Azure: se ha descontinuado la descarga automática y este procedimiento ahora hay que realizarlo manualmente además de tener que importar el fichero. Esto es debido a cambios no compatibles en el sistema de autenticación de Windows Azure al unificarse la federación de dominios en Windows Azure Active Directory 
  • Los paquetes se han actualizado al útlimo Azure SDK 1.7 de Junio de 2012
  • Corregido el paquete SMB
  • Corregidas diversas referencias para usar los últimos ensamblados
  • Corregida una incidencia por la que la contraseña del usuario “fileshareuser” se estaba caducando después de un mes, impidiendo compartir los archivos a través del servidor SMB
  • Corregido una incidencia en el asistente en el paso de verificación del despliegue ("No deployments were found")

Que lo disfrutéis!

Un saludo y Happy Coding!

DotNetNuke Azure Accelerator 6.3 Released!

DotNetNukePoweredWA

Since a few minutes ago the new version 6.3 of the DotNetNuke deployment wizard on Windows Azure in PaaS mode is available on CodePlex. In this new version there are a number of very interesting new features as well as the correction of certain issues that have arisen since the last packaging.

One of the most interesting new features from the administrative point of view is the new WebDeploy support on our websites deployed on Azure PaaS. I recommend you take a look at this post for more information (use the translate controls in the right panel).

Of course, if you are one of the lucky ones going to the DNN World Conference 2012 in Orlando, you can not miss the chance to see these and other features in the sessions dedicated to the deployment of DotNetNuke on Windows Azure from the hands of Joe Brinkman and Aaron Hayon.

Download DNN Azure Accelerator 6.3

New Features

  • Added SMTP support: added a new startup task to setup and configure the localhost SMTP server on the webroles. Now you can use LOCALHOST as SMTP server without the need of using a 3rd party SMTP server
  • Added "post-install" addons feature: if an url pointing to a .zip file is specified in the service configuration file, after the successful start of the SMB server the .zip file will be downloaded and decompressed into the DotNetNuke folder maintaining the same files and folder architecture and overwriting contents. This is an useful feature to add in an automated way 3rd party files, dependencies, etc. to a DotNetNuke clean install. Use it as you wish.
  • Added SSL binding support: the Accelerator wizard does not include a step to setup this yet, but the work is done in the package. To manually setup SSL on your service configuration file, please read this thread http://dnnazureaccelerator.codeplex.com/discussions/359504
  • Added Web Platform Installer support: a new startup task has been added to enable WebPI products installations and dependencies, like MVC3, WebDeploy, etc.
  • Added WebDeploy support: a new checkbox has been added in the Remote Desktop setup step, in order to enable WebDeploy. Using the new Web Plaform Installer feature, with Web Deploy enabled (note that enabling this feature takes about 10 more minutes for the VM deployment), you can access to your site using tools like WebMatrix or other command line tools like WebDeploy's command line utility, in order to copy or modify files or create your own backups.

Fixes

  • Changed the way to import the publish settings file: discontinued the automatic download while refreshing the subscription data, you have to manually download and import the file in the wizard.
  • The packages are using the latest Azure SDK 1.7 (June 2012)
  • Fixed the packageUrl on the SMB package
  • Fixed references to use latest versions
  • Fixed an issue causing the "fileshare" user's password being expired after a month
  • Fixed an issue on the wizard's verification step while deploying ("No deployments were found")

Enjoy!

Un saludo and Happy Coding!

Configurando Web Platform Installer y WebDeploy en un Azure WebRole

Después de pasarme más de tres días intentando resolver una incidencia al configurar  WebDeploy en un Azure WebRole –concretamente añadiendo dicha característica al DNN Azure Accelerator-, no me queda más remedio que documentar y compartir la solución para aliviar el sufrimiento a quien le pueda suceder algo parecido.

¿Para qué WebDeploy?

WebDeployVideoWeb Deploy simplifica el despliegue de aplicaciones y sitios web en servidores IIS. Se puede usar para sincronizar servidores IIS o migrar a nuevas versiones del mismo –por ejemplo, migrar de un entorno on-premise a la nube o viceversa.

Permite realizar operaciones de empaquetado y despliegue de aplicaciones web de una manera sencilla, integrándose perfectamente con  herramientas como Visual Studio o WebMatrix para ayudar a los desarrolladores en esta tarea. Se pueden empaquetar tanto contenido de las aplicaciones, configuración, bases de datos y cualquier otro artefacto como entradas en el registro, objetos COM, ensamblados en la GAC etc. pudiéndose parametrizar los valores de configuración según entorno. Una vez empaquetados estos paquetes se pueden utilizar usando una aplicación de comandos de Web Deploy o IIS Manager sin requerir privilegios administrativos.

Con la salida de Web Deploy 3.0, tenemos una serie de interesantes características:

  • Migración de servidores web desde IIS6 a IIS 7 o IIS 8
  • Sincronización eficiente de tu granja de servidores
  • Integración con Visual Studio y WebMatrix
  • Integración con Web Platform Installer para instalar aplicaciones web de la comunidad
  • Empaquetado de aplicaciones web, incluyendo las bases de datos asociadas, ACLs, COM, GAC, etc.
  • Despliegue de aplicaciones web sin requerir permisos administrativos, pudiendo parametrizar la configuración en cada entorno, así como integración con el IIS Web Management Service (WMSVC) para despliegue remoto por usuarios no administradores
  • Sincronización y migración de servidores web, sincronizando sólo los datos que han sido modificados
  • Copia de seguridad automática de los sitios web antes de realizar ningún cambio
  • Acceso a través de IIS Manager, Visual Studio, WebMatrix, línea de comandos, PowerShell Cmdlets y APIs.

¿Por qué en el DNN Azure Accelerator?

Como os podéis imaginar, añadir esta característica al DNN Azure Accelerator va a permitir realizar una serie de tareas administrativas no disponibles hasta ahora. Se me vienen a la mente unas cuantas, aunque por nombrar algunas:

  • Posibilidad de migrar la instancia de DNN de un IIS a otro. Esto incluye migrar desde on-premise a Azure –ya sea Azure WebSites o PaaS-, de Azure WebSites a Azure PaaS ó viceversa, etc.
  • Acceder y modificar el contenido del site a través de WebMatrix, ¡sin tener que acceder por RDP a las instancias en Azure ni tener que montar el VHD drive con Azure Connect!
  • Instalar actualizaciones de DotNetNuke, simplemente desplegando el paquete de upgrade a través de WebDeploy y ejecutando el asistente de actualización
  • Crear y restaurar copias de seguridad de nuestro sitio

Como véis, son unas buenas razones para añadir esta característica, que estará disponible en la próxima release del asistente de DNN Azure Accelerator –el código ya está disponible en CodePlex por si no quieres esperar al empaquetado.

WizardStepWebDeploy

¿Tres días para añadir esta característica?

No sólo tres días sino además unos 50 despliegues para poner en funcionamiento la misma, debido a había Luna llena en Aries y dos errores muy interesantes.

Pero antes que nada, echemos un vistazo a cómo está implementado. Para añadir esta característica sin disparar una línea de código –sin contar los cambios de interfaz en el asistente de instalación-, el enfoque fue el siguiente:

  • Añadir un EndPoint en los web roles para permitir el tráfico a través del puerto 8172
  • Incorporar la aplicación de comandos de Web Platform Installer WebPICMD.exe en una startup task del webrole, para automatizar la instalación de WebDeploy. Esto permite, además de no incrementar el tamaño del paquete de servicio del Accelerator, instalar del mismo modo cualquier otro paquete disponible y que requiera nuestro despliegue, como MVC3, Silverlight, node.js, etc.
  • Habilitar el servicio de administración remota de IIS en una startup task del webrole

Problema nº1: Web Platform Installer no consigue instalar el paquete de WebDeploy

Tras intentar instalar el paquete de WebDeploy con una instrucción como la siguiente, el webrole se quedaba ciclado por un error en la ejecución de la tarea:

   1: ~dp0WebPICMD.exe /Install /Products:WDeploy /AcceptEULA

Después de añadir los correspondientes logs siguiendo las buenas prácticas, el problema se trataba de que al intentar descomprimir los paquetes de instalación una vez que se han descargado, da un error. Este error es debido a que las tareas elevadas se ejecutan como “NT AUTHORITY\SYSTEM”, cuya carpeta de perfil de usuario se encuentra bajo el directorio “system32”. Esto es especial, ya que en máquinas de 64bits (como todas las VMs de Windows Azure), los procesos de 64bits ven esta carpeta, pero los procesos de 32bits ven la carpeta “SysWOW64). Los paquetes de WebDeploy se descargan en la carpeta “system32” al ser WebPICMD.exe de 64bits, pero algunas dependencias usan un ejecutable auto-extraible de 32bits, dando origen al error descrito.

Para solucionar este error, la única referencia en la web es la de nuestro Ángel de la Guarda Steve Marx en el post “Windows Azure Startup Tasks Tips and Tricks”, donde se da más detalle del mismo.

De este modo, la solución al problema 1 es cambiar en la registry la ubicación de esta carpeta antes de ejecutar la instalación y dejarla como estaba después de la misma. Quedaría de la siguiente forma:

   1: md "%~dp0appdata" 
   2: reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" /v "Local AppData" /t REG_EXPAND_SZ /d "%~dp0appdata" /f 
   3: "%~dp0webpicmd" /Install /Products:WDeploy /AcceptEula >>log.txt 2>>err.txt 
   4: reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders"/v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f

La segunda tarea de instalar el servicio de administración remota era muy sencilla, simplemente habilitar esta característica en la VM y arrancar el servicio, no sin antes tocar algún parámetro en el registro de Windows:

   1: start /w ocsetup IIS-ManagementService  
   2: reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WebManagement\Server /v EnableRemoteManagement /t REG_DWORD /d 1 /f  
   3: net start wmsvc  

 

Problema nº2: al intentar conectar a través de WebMatrix desde dentro o fuera de la VM, aparece el error “Unable to establish connection”

Este fue muy “gracioso”, por el número de horas que tuve que dedicarle el fin de semana y por los más de otros 30 despliegues más probando otras alternativas. Digo gracioso por cuál fue la solución.

El síntoma era que una vez que las startup tasks realizaron su trabajo (el puerto 8172 abierto, se instaló correctamente WebDeploy y estaba habilitado el servicio IIS Remote Management), al intentar conectar a través de WebMatrix, me aparecía el warning de advertencia de que no confiaba en el certificado del servidor –cosa totalmente correcta-, pero a continuación me aparecía el mensaje “Unable to establish connection”:

UnableToConnect

El puerto 8172 abierto, las credenciales correctas, el nombre del sitio correcto –nótese que desde esta release el site en IIS se denomina “DotNetNuke”-, la URL correcta y nombre de servidor correctos. ¿Qué fallaba?

Después de intentar ver algo en el visor de sucesos remoto, comenzar a utilizar artillería –PSTools, Fiddler, etc.- nada concluyente. La única información diferente era la otorgada por la aplicación de consola “msdeploy.exe”, devolviendo el código de error “ERROR_DESTINATION_NOT_REACHABLE” seguido de un precioso “404 Not Found”.

DESTINATION_UNREACHABLE

Sin más información ni nada interesante tras dos días de búsqueda por foros técnicos, casi da vergüenza comentar la solución.

La solución al problema 2 es simplemente cambiar el orden de las startup tasks, esto es, instalar primero IIS Management Service y a continuación instalar Web Deploy. Parece que al contrario, Web Deploy no se registra correctamente y hay que reinstalarlo.

La conclusión mereció un tweet:

BecauseOrderMatters

Conclusión

Espero que sirva de ayuda, tanto la nueva característica de WebDeploy en el DNN Azure Accelerator como las soluciones a los problemas encontrados. En breve estará todo empaquetado en una nueva release con muchas novedades aparte de esta.

Un saludo y happy coding!

DotNetNuke on Azure: from A to Zure

DotNetNukePoweredWAWhat a title to begin a post! It is actually something that I've been trying to take for some time: start a series of posts dedicated to the publication of the well-known CMS DotNetNuke on the Windows Azure platform commenting on each of the aspects, since the creation of the portal to the management of updates and post-maintenance, bringing each one of the tricks I've been finding over these past two years.

After having some "break-in" in the matter and after seeing confused people with the new Windows Azure Websites and the Virtual Machines (IaaS) options, adding to the already mature platform PaaS (Cloud Services with the DotNetNuke Azure Accelerator), I found almost every day answering questions about the basics of Windows Azure and others not as basic as how to perform backups depending on the choice made.

That is why, after making me a harakiri while planning my little free time, I decided to start this idea plus writing about other topics. They will both be written in Spanish as in English –perhaps with one day of difference- to increase the audience.

The number of initial blogs that I have in mind will be focused on the operational aspects of hosting DotNetNuke CE on Azure and I accept any suggestion. It is to make an interactive series where we clarify issues that may be obvious to some and not to others.

The second series of entries that I thought is about the specific development of DNN modules hosted in Windows Azure, which of course, will not have much sense without having earlier begun the previous.

AzurePlatformSiteHostingOptions

The initial series is as follows:

  1. What is DotNetNuke? What is Windows Azure? And DotNetNuke on Azure?
  2. Azure Websites, Virtual Machines, or Cloud Services: what to choose?
  3. SQL Server Virtual Machines or SQL Azure: what to choose?
  4. DotNetNuke on Azure Websites: deploying the content management system
  5. DotNetNuke on Azure Websites: upgrade management
  6. DotNetNuke on Azure Websites: making changes with WebMatrix 2
  7. DotNetNuke on Azure Websites: integrating with TFS and Git
  8. DotNetNuke on Azure Websites: scaling our website
  9. DotNetNuke on Virtual Machines: deploying the content management system
  10. DotNetNuke on Virtual Machines: upgrade management
  11. DotNetNuke on Virtual Machines: enabling the FTP, SMTP, and other services
  12. DotNetNuke on Virtual Machines: sending backups to Azure Storage
  13. DotNetNuke on Virtual Machines: scaling our website
  14. DotNetNuke in Cloud Services: deploying the content management system
  15. DotNetNuke in Cloud Services: upgrade management
  16. DotNetNuke in Cloud Services: customizing the service package
  17. DotNetNuke in Cloud Services: scaling our website

As you can see, the thing have crumbs. Tomorrow I will be starting with the first entries and you know, if you have any suggestions to add some chapters, are welcome.

Un saludo y Happy Coding!

DotNetNuke en Azure: de la A a la Zure

DotNetNukePoweredWA¡Menudo título para comenzar un post! En realidad es algo que llevo intentando emprender desde hace algún tiempo: comenzar una serie de entradas dedicadas a la publicación del archiconocido gestor de contenidos DotNetNuke sobre la plataforma Windows Azure comentando cada uno de los aspectos, desde la creación del portal hasta la gestión de actualizaciones y mantenimiento del mismo, aportando cada uno de los trucos que he ido encontrándome durante estos dos últimos años.

Después de tener cierto “rodaje” en la materia y después de ver gente algo confundida ahora que tenemos en modo Preview las Windows Azure Websites y las Virtual Machines (IaaS) sumándose a la ya madura plataforma PaaS (Cloud Services con el DotNetNuke Azure Accelerator), me he encontrado respondiendo casi a diario cuestiones sobre aspectos básicos de Windows Azure y otros no tan básicos como la manera de realizar copias de seguridad dependiendo de la elección realizada.

Es por ello que, después de hacerme un harakiri con la planificación de mi poco tiempo libre, he decidido poner en marcha esta idea a la vez que voy escribiendo sobre otros temas. Estarán escritos tanto en español como en inglés –puede que alguno u otro esté con un día de diferencia- para ampliar la audiencia.

La serie de blogs inicial que tengo en mente irá centrada sobre los aspectos operativos de alojar DotNetNuke CE sobre Azure y acepto cualquier sugerencia. Se trata de hacer una serie interactiva donde aclararemos cuestiones que pueden ser evidentes para algunos y no tanto para otros.

La segunda serie de entradas que tengo en pensada es sobre el desarrollo específico de módulos DNN alojados en Windows Azure que claro está, no tendrá mucho sentido sin antes haber comenzado la anterior.

AzurePlatformSiteHostingOptions

La serie inicial será la siguiente:

  1. ¿Qué es DotNetNuke? ¿Qué es Windows Azure? ¿Y DotNetNuke sobre Azure?
  2. Azure Websites, Virtual Machines o Cloud Services: ¿qué elegir?
  3. SQL Server en Virtual Machines o SQL Azure: ¿qué elegir?
  4. DotNetNuke en Azure Websites: desplegando el gestor de contenidos
  5. DotNetNuke en Azure Websites: gestión de actualizaciones
  6. DotNetNuke en Azure Websites: realizando modificaciones con WebMatrix 2
  7. DotNetNuke en Azure Websites: integrando con Git y TFS
  8. DotNetNuke en Azure Websites: escalando nuestro sitio web
  9. DotNetNuke en Virtual Machines: desplegando el gestor de contenidos
  10. DotNetNuke en Virtual Machines: gestión de actualizaciones
  11. DotNetNuke en Virtual Machines: activando FTP, SMTP y otros servicios
  12. DotNetNuke en Virtual Machines: enviando copias de seguridad a Azure Storage
  13. DotNetNuke en Virtual Machines: escalando nuestro sitio web
  14. DotNetNuke en Cloud Services: desplegando el gestor de contenidos
  15. DotNetNuke en Cloud Services: gestión de actualizaciones
  16. DotNetNuke en Cloud Services: personalizando el paquete de servicio
  17. DotNetNuke en Cloud Services: escalando nuestro sitio web

Como veis, la cosa tiene miga. Mañana mismo comienzo con la primera de las entradas y ya sabéis, si tenéis alguna sugerencia con añadir algún capítulo, bienvenida sea.

Un saludo y Happy Coding!

[Offtopic] Cómo instalar Canal+ YOMVI en Windows 8

CanalPlusYomvi

Hoy toca escribir uno de esos posts que tienen los días contados ya que supongo que Canal+ adoptará medidas en breve, pero espero que a alguno le ayude mientras tanto.

Durante el pasado Megathon de Windows 8 comenté que prácticamente todas las aplicaciones que hoy en día funcionan en Windows 7 se ejecutan sin problemas en Windows 8. Una de las que entran en la excepción para confirmar la regla es la App de Canal+ Yomvi para poder ver en tu PC los contenidos de Canal Plus a los que estés suscrito (realmente no todo pero hasta 18 canales por el momento). Ya se había convertido en una de mis aplicaciones favoritas y hace meses atrás, cuando instalé la Release Preview de Windows 8, no conseguí echarla a andar correctamente ya que la imagen iba a tirones.

Con la versión RTM de Windows 8 y con los drivers actualizados de tu tarjeta de video, hay un “workaround” para lograr instalar y ejecutar la aplicación correctamente:

  1. Descargar la aplicación cliente de Canal+ Yomvi para PC desde este enlace: http://www.plus.es/canalplusyomvi/descarga/. Fíjate que si intentas instalar la aplicación te dará el siguiente error:

    YomviInstallError
  2. Descargar el descompresor 7-Zip desde la siguiente URL: http://www.7-zip.org/download.html
  3. Descomprimir el archivo ejecutable descargado en el Paso 1 pulsando con el botón derecho del ratón, con lo que obtendremos el fichero de instalación “NagraMediaPlayer.msi”
    NagraMediaPlayer
  4. Iniciar la instalación haciendo doble click en el archivo y completar el asistente, indicando que cree el acceso directo en el escritorio:

    YomviInstallWizard
  5. Pulsando con el botón derecho sobre el icono del escritorio, establecemos las siguientes propiedades en la pestaña de Compatibilidad
    1. Seleccionar modo de compatibilidad Windows 7
    2. Ejecutar la aplicación como Administrador

      CompatibilidadAccesoDirecto
  6. Ejecutar la aplicación e introducir los credenciales de tu suscripción a Canal+
    YomviLoggedIn
  7. A disfrutar!

Como comenté al principio, esta solución la había probado con la Release Preview de Windows 8 y la imagen me iba a tirones, cosa que parece solucionarse al poder instalar los correspondientes drivers de la tarjeta de video para la versión RTM. Hay algunos enlaces y menús en la parte superior que parecen no funcionar como debieran (supongo que por que de algún modo está utilizando el motor de IE10 incorrectamente), pero después de pasar por encima el ratón y hacer click puedes acceder a ellos sin problemas.

Ya puedo seguir desarrollando mientras veo mi serie favorita Smile

DesktopYomviCropped

Un saludo y Happy Coding!

Posted: 12/9/2012 19:52 por David Rodríguez | con no comments
Archivado en:
[Evento] Megathon Windows 8 en Tenerife

Banner_1Si aún no te has enterado es porque has pasado este verano totalmente desconectado, no hay otra explicación. El próximo 7, 8 y 9 de septiembre (fin de semana) se ha montado una gorda a nivel nacional y en 13 ciudades se desarrollará al mismo tiempo el primer Hackathon multiciudad en España.

El Megathon Windows 8 es una ocasión estupenda para aprender a desarrollar para Windows 8 (de hecho ya puedes hacerlo con toda la formación gratuita que se ha publicado en el sitio oficial del Megathon), para hacer networking con personas que comparten tus mismos intereses y para acabar el fin de semana con una app que rentabilizar en la Windows Store.

Partió de una idea loca en Twitter sobre hacer un hackathon aprovechando la salida de Windows 8, que a través de un efecto mariposa –y de ver quién los tenía más grandes, los megas me refiero-, acabó convirtiéndose en un hackathon multiciudad ahora denominado Megathon. En este post de Jose Bonnin tienes más información de cómo empezó todo.

¿En qué consiste?

En resumen, en cada ciudad se crearán grupos de 4 desarrolladores/diseñadores para crear una aplicación para Windows 8 a contrarreloj durante el fin de semana, ya sea con .NET, Javacript+HTML y cualquier añadido (¿Windows Azure? ¿Bing?). No estaréis solos, habrán varios mentores por ciudad ofreciendo apoyo técnico así como impartiendo diversas charlas en paralelo.

El domingo por la tarde, se votará la aplicación ganadora accediendo a unos premios locales a través de un jurado local. Las aplicaciones que hayan ganado en cada ciudad participarán en el concurso nacional, con la posibilidad de conseguir hasta un viaje a Redmond para conocer el campus de Microsoft con los gastos pagados para todos los miembros del equipo.

Más información: bases Megathon Windows 8 

¿Cuánto cuesta?

El evento es gratuito para todos los asistentes, gracias al patrocinio y colaboración de diversas entidades a lo largo del territorio nacional, así como la dedicación desinteresada de los mentores –vamos, que también tenemos jiribilla por participar de algún modo en tan magno evento.

En el caso de Tenerife tenemos que dar las gracias a Microsoft, Intelequia Software Solutions, General de Software de Canarias, Fundación Empresa Universidad de La Laguna, Cámara de Comercio de Santa Cruz de Tenerife, Fuentealta y Panrico Donuts, así como a Telerik, a los miembros de TenerifeDev y en general a todos los organizadores y mentores a nivel nacional que han puesto su granito de arena para que esto haya sido posible.

¿Dónde me registro?

Para registrarte en el Megathon de Windows 8 de Tenerife, sigue el enlace siguiente:

Registro Megathon Windows 8 Tenerife

En la web oficial del Megathon tienes más información sobre dónde registrarte para el resto de ciudades.

¿Dónde se desarrolla?

En el caso de Tenerife y gracias a la Fundación Empresa Universidad de La Laguna, dispondremos de unas aulas para el desarrollo del mismo durante todo el fin de semana. Sigue este enlace para ver cómo llegar.

¿Cuál va a ser la agenda?

En la web del Megathon de Windows 8 disponéis de la agenda completa de los 3 días, comenzando el viernes 7 de septiembre a las 17:00 horas y finalizando el domingo 9 de septiembre a las 19:00 horas.

NOTA IMPORTANTE PARA TENERIFE: El horario de la agenda es siempre hora local, con lo que en Tenerife comenzaremos a las 17:00 GMT+0 (hora canaria).

¿Tengo que llevar algo?

Para poder disfrutar de este pedazo de evento es necesario que traigáis vuestro propio equipo con Windows 8 instalado –vale instalado en una máquina virtual. Si no sois suscriptores de MSDN/Technet podéis descargaros una versión de prueba de 90 días. También tenéis que traer instalado Visual Studio 2012, bien la versión Express gratuita o la versión de prueba de Visual Studio 2012 Ultimate. En este enlace se explica cómo instalar Windows 8 en un VHD con el arranque nativo de Windows 7.

Más información

Podéis manteneros informados de los cambios y últimas noticias en el blog, o bien puedes conversar con nosotros por twitter mediante el hashtag #megathonW8.

Un saludo. ¡Nos vemos el 7!

WP7, Windows 8, redes sociales con Windows Azure y DotNetNuke: todo en la TFLP2k12

SantaCruz40CPara el que esté algo despistado, hoy se han abierto las puertas de la Tenerife LAN Party 2k12, en un día que se alcanza la máxima temperatura del año en Santa Cruz de Tenerife. ¿Será debido al calentamiento de motores en el Recinto Ferial por el comienzo del evento?

¿O será por el número de sesiones sobre lo más de lo más que transcurrirán a lo largo de la LAN Party?

Si aún no has echado un vistazo a la agenda completa, te recomiendo que hagas planes para estos días porque no querrás perderte ni una, ni tampoco las “cosillas” que vamos a sortear desde TenerifeDev en las sesiones que tenemos preparadas Sonrisa

Aquí van los enlaces directos de las sesiones que prepara TenerifeDev, centrándonos en el desarrollo con Windows Phone 7, Windows 8, construcción de redes sociales sobre Windows Azure e innovación en Canarias.

Jueves 19 de Julio

Viernes 20 de Julio

TelerikY si como si ahí no quedara la cosa, este año con patrocinios de calibre mundial como Microsoft, Telerik o Pluralsight.

nokia-lumia-800-500x500¿Y qué dicen los rumores? Pues por ahí corren rumores sobre que se van a sortear camisetas, cursos gratuitos para “hard-core developers”, algunas cosas bastantes frikis y…Nokia Lumia 800?? No puede ser verdad…

¿Te lo vas a perder?

Cómo solucionar un GPF de las herramientas de Cerebrata para Azure

Hoy ha sido uno de esos días. Problema en producción en Azure, vas a abrir las herramientas de diagnóstico para descubrir la causa y…al intentar abrirlas no lo consigues. Houston! Tenemos un problema!

El problema que me surgido es al usar las herramientas de Cerebrata, al intentar abrir tanto Azure Diagnostics Manager como Cloud Storage Studio, que permiten realizar diagnósticos sobre despliegues en Azure así como administrar el contenido del almacenamiento, despliegues, etc. El error en cuestión al abrir cualquiera de los dos era el siguiente:

GPFCerebrata

Después de resolver el problema por otros medios (usar otra herramienta, instalarlas en modo trial en otro equipo, etc.), he tenido algo de tiempo para investigar la causa.

La clave me la ha dado el utilizar Process Monitor para descubrir que justo antes del GPF se estaba accediendo a unos ficheros de configuración. Según el mensaje de error (problema de codificación en Base 64 en un archivo), me imaginé que el problema provenía de que el fichero donde se almacenan las suscripciones configuradas, incluyendo certificados de administración de Azure, etc. se habían ido al garete.

Solución

Para solucionar el problema, basta con abrir la ruta “C:\Users\<UserName>\AppData\Roaming\Cerebrata Software\AMS” y eliminar/renombrar los archivos “application.setting” y “connectionsettings.amsproj”, teniendo que volver a configurar las conexiones a los servicios de Azure una vez abierto con éxito de nuevo las aplicaciones.

ConnectionSettings

He intentado documentar la solución en los foros del producto, pero ni he encontrado uno en la web de Cerebrata, ni en los foros de Red-Gate (Cerebrata fue adquirida por Red-Gate), así que dejo la nota aquí por si a alguien le ocurre algo similar.

Espero que sirva de ayuda.

Un saludo y Happy coding!

Posted: 27/6/2012 15:28 por David Rodríguez | con no comments
Archivado en:
DNN Goes Social: evento en directo de DNN 6.2

62--icnEste miércoles 30 de Mayo, en vivo y en directo de 17:00 a 18:00 (GMT+0) a través de streaming podrás asistir a la presentación de DotNetNuke 6.2 de la mano de Shaun Walker, CTO y cofundador de DotNetNuke Corporation y Will Morgenweck, Director de Producto de DotNetNuke.

Register

Durante la sesión, Shaun presentará la visión de DotNetNuke y el roadmap para la fusión de colaboración en redes sociales con la gestión de contenidos web. Morgenweck demostrará cómo se pueden usar las nuevas características de colaboración social para desplegar comunidades sociales en línea.

La última versión de DotNetNuke 6.2, provee de un completo conjunto de herramientas que te permiten diseñar, desarrollar y desplegar soluciones de colaboración social. En esta última versión, las herramientas de colaboración social se han integrado en el framework, haciendo más fácil que nunca construir sitios web altamente funcionales que dan el poder de participar en comunidades interactivas, formar relaciones online, publicar perfiles ricos y comunicarse a través de fuentes de actividad, grupos sociales, foros y mensajes privados.

En esta sesión aprenderás sobre:

  • Nuevas funcionalidades en DNN 6.2
  • Cómo DNN 6.2 puede ayudar a convertir a tus clientes en defensores de tu negocio
  • Cómo DNN 6.2 te facilita desplegar intranets sociales que fomentan la colaboración dentro de tu organización
  • Cómo usar la completa suite de herramientas sociales para desarrollar y desplegar soluciones de colaboración en línea
  • Acerca de la visión de DotNetNuke y Roadmap de producto
DotNetNuke 6.2 Goes Social

Convertir tus sitios web en redes de colaboración social se va a convertir en un juego de niños. ¿Cuándo estará disponible? Fácil, el 2 de Junio (el 6/2 en formato americano).

Que lo disfrutéis.

Limpiar el esquema de una base de datos en SQL Azure tras las instalación fallida de un módulo DNN

database-cleanUna de las tareas comunes a la hora de adaptar un módulo de DotNetNuke para que sea compatible con Windows Azure, es la de adaptar los scripts de SQL de instalación para que puedan ejecutarse sobre SQL Azure. Con esta adaptación probablemente tenemos el módulo adaptado al 100%, ya que el resto del módulo debería funcionar del mismo modo en Windows Azure como en cualquier otro IIS hospedado fuera de la plataforma.

Al intentar realizar la instalación de un módulo para comprobar si funciona correctamente, probablemente nos encontremos con un problema en algún paso de la creación del esquema en SQL Azure, y en el que si estos scripts no están bien diseñados con sus correspondientes “Rollbacks”, pueden dejarnos objetos “basura” en el esquema de nuestra base de datos. Si intentamos volver a instalar el módulo, resulta que dará más problemas ya que estos objetos ya existen.

A continuación dejo un script de SQL para eliminar todos los objetos relacionados con un módulo, si es que éste se ha diseñado siguiendo las buenas prácticas de creación de módulos de DotNetNuke (todos los objetos comienzan por el nombre del módulo “<nombreModulo>_<nombreObjeto”, excepto las vistas que siguen la nomenclatura “vw_<nombreModulo>_nombreVista”.

En el ejemplo siguiente, el nombre del módulo es “mymodule”, palabra de búsqueda que debe ser reemplazada por el nombre del módulo en cuestión.

DECLARE @name varchar(250)
DECLARE @type varchar(10)
DECLARE @searchword varchar(250)
DECLARE @command VARCHAR(2000)

SET @searchword = '%mymodule_%'

DECLARE objects_cursor CURSOR FOR
(
    SELECT name, type
    FROM sys.objects 
    WHERE name LIKE @searchword
        AND (type IN ('U', 'P', 'FN', 'V', 'TF'))
)

OPEN objects_cursor

FETCH NEXT FROM objects_cursor
INTO @name, @type


WHILE @@FETCH_STATUS = 0
BEGIN    
    SELECT @command =
        CASE @type
            WHEN 'P' THEN 'DROP PROCEDURE ' + @name
            WHEN 'U' THEN 'DROP TABLE ' + @name
            WHEN 'FN' THEN 'DROP FUNCTION ' + @name
            WHEN 'TF' THEN 'DROP FUNCTION ' + @name
            WHEN 'V' THEN 'DROP VIEW ' + @name
            ELSE ''        
    END
    
    IF (@command <> '')
    BEGIN
        PRINT 'Dropping ' + @name + '...'
        EXEC (@command)
    END
    ELSE
    BEGIN
        PRINT 'WARNING: ' + @name + ' will not be deleted'
    END 
    
    FETCH NEXT FROM objects_cursor
    INTO @name, @type    
END
CLOSE objects_cursor
DEALLOCATE objects_cursor

Espero que sirva de ayuda. Un saludo.

Nueva versión DotNetNuke Azure Accelerator 6.2 Beta

DotNetNukeGearAyer se lanzó en CodePlex la nueva versión DotNetNuke CE 6.2 Beta 2 con una buena cantidad de nuevas características y funcionalidades que permiten nuevas posibilidades como crearte tu propia red social privada así como otras capacidades móviles como redirección de website dependiendo del tipo de móvil, todo a través de configuración. La nueva versión 6.2 continúa con el nuevo paradigma de CMS que fue anunciado en la DotNetNuke World Conference 2011: CMS = “Cloud” + “Mobile” + “Social”.

Es un placer anunciar que una nueva versión Beta del DotNetNuke Azure Accelerator está disponible en CodePlex, que incluye tanto correcciones como nuevas características que trataré de resumir en este post.

Descargar DotNetNuke Azure Accelerator 6.2 Beta

DotNetNuke Azure Accelerator 6.2 Beta

Lo que puedes esperar en este lanzamiento es una nueva versión del asistente del Accelerator así como de los paquetes de servicio, que son capaces de trabajar con tus VHDs y bases de datos SQL Azure actuales añadiendo nuevas funcionalidades en el entorno donde están alojadas y corrigiendo algunos comportamientos. Si bien actualmente esta versión del Accelerator instala la versión DNN 6.2 Beta 2 en unidades VHD vacías, esto sólo será durante esta fase Beta –que finalizará conjuntamente con el lanzamiento definitivo de DotNetNuke 6.2-. Probablemente la etiqueta “6.2” se quitará del nombre del Accelerator usando otra nomenclatura, ya que una de las nuevas características del Accelerator es que no depende de una versión específica de DotNetNuke permitiendo desplegar la última versión disponible en CodePlex de DNN CE, sin importar cuál sea. De manera que espera un cambio de “nombre” en el Azure Accelerator antes de la versión definitiva.

La lista de cambios en esta versión es la siguiente:

1. Cambios en el asistente del Accelerator

  • Aprovisionamiento y despliegue automático: esta es probablemente una de las nuevas características que más gustará, porque usando la misma técnica que usa el Azure SDK 1.6 para Visual Studio, permite la descarga automática de un fichero de configuración de publicación para administrar remotamente todas tus suscripciones. Después de descargar estas opciones de forma segura, puedes seleccionar el servicio de hospedaje, la cuenta de almacenamiento y el servidor de bases de datos, todo desde dentro del asistente. Si no has aprovisionado estos recursos desde la consola de administración de Windows Azure, puedes hacerlo desde el asistente, incluyendo la creación automática de las pertinentes reglas en el firewall de SQL Azure. Antes de comenzar el despliegue, se verificará el estado de los recursos aprovisionados para comprobar que están disponibles (por ejemplo, verificar y esperar a que la cuenta de almacenamiento esté disponible). Si el entorno de destino –producción o ensayo- está ocupado por un despliegue previo, aparecerá un diálogo de confirmación para sobrescribir el despliegue actual –sólo se sobrescriben las instancias desplegadas, nunca el VHD o la base de datos. El certificado PFX también se sube y configura automáticamente en el servicio de hospedaje de forma transparente para el usuario.  Deployment
  • Opción para instalación automática: una nueva opción ubicada en el paso de selección de paquete de despliegue, permite seleccionar el modo “auto-instalación” como último paso de despliegue usando los parámetros de instalación por defecto de DotNetNuke. Si seleccionas esta opción, tendrás un sitio web completamente funcional que usa la plantilla y credenciales por defecto (usuario “host”, contraseña “dnnhost”). Recuerda cambiar estos credenciales tan pronto como sea posible. AutoInstall
  • Despliegue en el entorno de ensayo de Azure: como el nuevo paquete de despliegue no requiere “host headers” para el sitio –ver cambios en los paquetes de instalación más adelante- ahora puedes desplegar en el entorno de ensayo de Azure y comenzar a jugar con el botón de Intercambiar VIP desde la consola de administración de Windows Azure.
  • Opción para exportar los resultados del asistente a una carpeta local: hay una nueva opción –que no usa los servicios administrados de Azure- para crear y configurar ficheros de configuración de servicio y paquetes de instalación, exportándolos a una carpeta para despliegue manual, muy útil en algunos escenarios. El fichero de certificado PFX también en la misma carpeta después de haberte solicitado una contraseña para el mismo.

2. Cambios en los paquetes de servicio

  • Descarga automática de DNN CE directamente desde CodePlex: otra característica importante en el Accelerator es la descarga automática del último paquete de DNN CE disponible directamente desde CodePlex durante el despliegue del rol en Azure, siempre y cuando la unidad VHD esté vacía. Puedes sobrescribir el parámetro “packageUrl” para descargar desde otra ubicación personalizada, como las anteriores localizaciones en Azure Storage o cualquier otra Url válida BETA: esta Url actualmente apunta a la versión DNN CE 6.2 Beta 2 hasta la versión definitiva 6.2. La descarga se realiza directamente desde CodePlex hacia tu servicio hospedado en Azure.

DNNCodePlex

  • Cambiados enlaces por defecto: El sitio web predeterminado será el sitio DotNetNuke en vez del propio sitio del webrole –reservado para futuras características-, lo que significa que ya no es obligatorio especificar encabezados de host habilitando la posibilidad de desplegar en el entorno de ensayo y otras operaciones como Intercambio VIP
  • Creación de la base de datos en el role startup: ahora en el evento de inicialización del role, se creará la base de datos y el usuario en el caso de que éstos no existan. Esto hace más fácil la creación de nuevos despliegues de DNN sobre Azure simplemente modificando un fichero de configuración pre-existente sin tener que realizar de nuevo todas estas tareas manualmente o a través del asistente
  • Nueva página de progreso del despliegue: se ha añadido una nueva página de información del progreso del despliegue al sitio web del webrole, mostrando el estado del despliegue hasta que el sitio de DotNetNuke esté disponible. Por defecto, la información de registro almacenada en Table Storage no se muestra en esta página, teniendo que habilitar esta opción en el fichero de configuración para propósitos de depuración. También puedes acceder a estos detalles conectándote por escritorio remoto a cualquier webrole y navegando a la dirección http://admin.dnndev.me 
  • Descarga más pequeña: las paquetes adicionales se han movido a una descarga por separado –no disponible aún en la fase Beta. El asistente viene con el paquete “Azure Single and Small” de manera que la descarga sólo ocupa 4Mb.

3. Correcciones y mejoras

  • Modificada la creación de la cuenta de usuario local con la que se comparte la unidad VHD para no permitir la caducidad de la misma después de un mes (necesita revisión, el enfoque debe ser diferente)
  • Modificados los EndPoints de los web roles para permitir tráfico en el puerto 443
  • Modificadas las operaciones de compresión usando código manejado (ICSharpCode.SharpZipLib.dll)
  • Uso de "netsh advfirewall firewall" para permitir el tráfico en el servidor SMB (ver http://support.microsoft.com/kb/947709/)
  • Uso del sistema operativo Windows 2008 R2
  • Agregación automática de la entrada "IsWebFarm" en el fichero web.config para habilitar el proveedor de caché FileCachingProvider
  • Modificada la inicialización del monitor de diagnósticos. Ahora los eventos están siendo correctamente registrados en los web roles.

Tareas planificadas pendientes

Las tareas planificadas pendientes para la versión definitiva son:

  • Añadir soporte de Alta Disponibilidad para el SMB worker role –actualmente realizando pruebas sobre la solución tomada
  • Capturar el evento “Changing” para detectar cambios de configuración o topología y actuar en consecuencia
  • Cambiar los procesos de larga duración en el asistente como tareas en segundo plano para no congelar la interfaz de usuario

Por favor, si detectas algún bug, crea una incidencia en la página Issue Tracker disponible en CodePlex.

Enjoy it!

DotNetNuke Azure Accelerator 6.2 Beta Released

DotNetNukeGearYesterday the new DotNetNuke 6.2 Beta 2 was released on CodePlex with a bunch of new features and fixes that allows new possibilities like creating your own and private social network, plus other mobile capabilities like mobile website redirection on CE version. The new 6.2 release continues with the new CMS paradigm that was announced at the DNN World 2011 Conference: CMS = “Cloud” + “Mobile” + “Social”.

I’m pleased to announce that a new Beta release of the DotNetNuke Azure Accelerator has been released and is also available on CodePlex, that includes both fixes and new great features that I’ll try to summarize in this post.

Download DotNetNuke Azure Accelerator 6.2 Beta

New DNN Azure Accelerator 6.2 Beta

What you can expect from this release is a new version of the Accelerator wizard and packages, that are capable to use your actual VHDs and SQL Azure databases but adding new features on the Azure hosting environment and fixing some behaviors. If actually the Accelerator will install the 6.2 Beta 2 version on empty VHD drives, this will be only during this Beta phase –that will end with the final DotNetNuke 6.2 release- and probably the “6.2” will be removed from the name of the Accelerator using other nomenclature, because a new agnostic feature allows to deploy the latest available DNN CE version on CodePlex, no matter which version. So expect also a “name” change on the Azure Accelerator before the final release.

The categorized list of new features is as follows:

1. Changes on the Wizard

  • Automatic provisioning and deployment: this is probably one of the new features that new users will like a lot, because using the same technique that uses the Azure SDK 1.6 for Visual Studio, allows to automatically download a publish settings file and manage remotely your subscriptions. After getting this publish settings, you can select the hosted service, storage account and SQL Azure database, all from the wizard. If you don’t have provisioned them from the Windows Azure Portal, you can do it from the wizard. This includes the automatic creation of the proper SQL Azure firewall rules. Before deploying, the status of the provisioned resources is verified in order to check that all of them are available (i.e. verify and wait for storage account ready status). If the target slot is occupied by a previous deployment, a confirm dialog appears for overwriting the current deployment –only the VM, not the VHD or database. The PFX certificate is also automatically uploaded and configured on your hosted service without any user interaction.Deployment
  • Option for automatic installation: a new option located in the package selection step, allows to select auto-installation as the final step of the deployment, using the DotNetNuke default parameters. If you select this you will have a fully functional site running on Windows Azure deployed with the default website template and default credentials (user “host”, password “dnnhost”). Remember to change this credentials as soon as possible.

AutoInstall

  • Deploying on Azure staging environment: as the new package does not need “host headers” for the site –see package new features below- now you can deploy on Staging environment –and you can start playing with the Swap VIP button on the Windows Azure Management Console.
  • Option to export the wizard results to local file system: there is an option -that not uses Azure managed services- to create and configure a service configuration file and service package, exporting them to a folder for manual deployment, useful on some scenarios. The PFX file is also exported –you will be asked for a password- for manual import.

2. Changes on the packages

  • Automatic DNN CE download from CodePlex: another important feature on the Accelerator is the automatic download of the latest available DNN CE package from CodePlex on first Azure role run –when the package is deployed on Azure and the VHD drive is empty. You can overwrite the "packageUrl" setting to download from any other customized location, like previous Azure Storage container locations or any other. BETA: this Url actually points to the DNN CE 6.2 Beta 2 version until final 6.2 release. The download is done directly from CodePlex to your hosted service on Azure.

DNNCodePlex

  • Changed default binding: The default website will be the DotNetNuke website instead of the webrole website, what means that specifying host headers is no longer mandatory, and enables the possibility of deploying on Staging environment and other operations like Swap VIP
  • Database creation on role startup: now on role startup, the database and login user will be created if the database does not exist. This will make easier to create new DNN service deployments by simply changing the service configuration file without having to do that task manually or through the accelerator wizard.
  • New deployment progress page: added new deployment progress page on the webrole website, showing the service deployment status until the site is ready. By default, the deployment log stored on Table Storage is not shown on this page, but you can enable it on the service configuration file for debugging purposes. You can access also these details using remote desktop on any webrole and browsing "http://admin.dnndev.me".
  • Smaller download: the packages has been moved to a separated download –not available yet on Beta phase. The wizard comes with the "Azure Single and Small" package so the DNNAzureAccelerator package only weights 4Mb.

3. Fixes and enhancements

  • Modified the local file sharing user account creation on roles to don't allow account expiration after a month (needs revision, the approach must be different)
  • Modified the web roles endpoints to allow traffic on port 443
  • Changed the package unzip operations to use managed code (ICSharpCode.SharpZipLib.dll)
  • Use of "netsh advfirewall firewall" to allow traffic on the SMB server (see http://support.microsoft.com/kb/947709/)
  • Use of Windows 2008 R2 OS
  • Automatic adition of "IsWebFarm" app setting in the web.config file to enable the FileCachingProvider
  • Changed the Azure diagnostic monitor initialization. Now the events are being correctly logged on web roles.

Pending planned tasks

The pending tasks planned for the final release are:

  • Add HA support for the SMB worker role, actually doing tests on the solution taken
  • Handle the “Changing” event to detect configuration or topology changes and act in consequence
  • Change the long process tasks on the wizard as background workers to not freeze the UI

Please, if you detect any bug on this release, create an issue on the Issue Tracker page available on CodePlex.

Enjoy it!

Quitar el atributo de “ReadOnly” en un disco USB externo

Durante estos últimos días he estado trasteando para poder montar un VHD para probar la RC de System Center 2012 y así poder ver las características de integración con Windows Azure. La lista de requerimientos del software es tan grande que al final con los 25Gb que asigné para el VHD no me ha dado ni para instalar los mismos.

Problema

Encima, después de hoy estar ampliando el tamaño del VHD comienzo a tener una serie de problemas, que indicaban que el disco externo USB donde tengo almacenada la imagen estaba protegido para escritura. WTF?

DiscoReadOnlyAl parecer, después de realizar una búsqueda por Internet sobre este problema, la causa del error es por no usar la utilidad de “Expulsar hardware de forma segura” –ese icono que tienes al lado del reloj del sistema. He de reconocer que en mi vida lo he usado y no había tenido problema alguno, pensé que eso icono lo ponían sólo para hacer perder el tiempo Sonrisa. Está claro que habrá que empezar a usarlo.

Después de muchas soluciones propuestas -algunas no imposibles sugiriendo formatear el disco perdiendo todos los datos-, he conseguido dar con una solución que, si bien puede no solucionar el problema a todo el mundo, por lo menos a mí me ha funcionado. Como nota aclaratoria, indicar que el disco no me aparecía como “ReadOnly” si trataba de usarlo en otros equipos, sólo me pasaba con el equipo que trabajo habitualmente.

La configuración actual sobre que tengo es:

  • Windows 7 Ultimate SP1 64bit, con todas las actualizaciones hasta la fecha
  • Disco USB externo Iomega 500Gb, con BitLocker activado

Solución

Para solucionarlo he realizado los pasos siguientes:

1) Añadir/modificar un valor DWORD en la registry:

    • Inicio > Ejecutar… y escribir “regedit”
    • Buscar la entrada HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies (si no existe esta última, crearla)
    • Añadir un valor DWORD “WriteProtect” con valor “0”

DiscoReadOnlyRegistry

2) Poner offline el disco USB:

  • Abrir el administrador de discos, accediendo a “Panel de control > Herramientas Administrativas > Computer Management”, y desde esta consola, seleccionar el nodo “Administrador de discos”
  • Pulsar con el botón derecho del ratón sobre el disco y seleccionar el menú “Offline”DiscoOffline

3) Poner online el disco USB:

  • Volver a pulsar el botón derecho del ratón y pulsar sobre “Online”

Voilá! el disco ya vuelve a estar operativo para operaciones de escritura. Espero que sirva de ayuda a alguno.

Posted: 21/4/2012 14:55 por David Rodríguez | con no comments
Archivado en: ,
RedGate Cloud Services: your SQL Azure backups as a service

RedGateCloudServicesToday I can finally speak publicly about a new cloud service that has seen the light and I had the pleasure of participating in CTP phase.

Since SQL Azure is available on the market, one of the main workhorses has been how to implement backups of our databases. Initially the only way I had was to make a copy of the database in another SQL Azure, which meant the cost of having to pay for the additional database. Later began to appear new tools that allowed the export/import the data and schemas through SQL scripts or through the new “bacpac” format. A good summary of them was made on this Luis Panzano’s blog entry, showing the advantages and disadvantages of each of them.

All these previous solutions is in addition of a new backup solution for SQL Azure, nothing more and nothing less than from the hand of Redgate, widely recognized worldwide for its database products.

What is it?

RedGate Cloud Services is a new cloud service for backing up SQL Azure databases in an automated and scheduled way, without having to perform any task that requires complex or depth technical knowledge of the Azure platform.

The new RedGate’ service allows, using the export/import "bacpac" file format, automated backing up through a very simple user interface.

clip_image001

And while this simple interface simplifies the way we perform the backup, one of the most interesting options is the ability to schedule them. Scheduling options are initially not many, but the feedback from the community is doing to implement all the new scheduling needs required.

clip_image002


Where are backups stored?

While from my point of view is that the most recommended option is to store backups in Azure Storage since involves no data transfer costs -remember that the internal data traffic in the same Azure datacenter only is not charged-, there are another two interesting options: backup on Amazon S3 or sent to an FTP server, very interesting options to have automated copies in different storage locations for redundancy, even if we must pay the additional cost of data transfer.

clip_image003


What is ideal for?

Although from the Azure control panel we can manually export databases in the “bacpac” format to Azure Storage -this service is no longer CTP and is fully supported-, the main problem is that current utility on Azure control panel does not allow scheduled backups, so that to perform a daily backup we should visit daily the Azure control panel and run the process manually.

With this new Redgate’ service we can schedule different backups for the same or different databases through a simple user interface, which frees us from having to perform the backup tasks manually. Furthermore, we can access the historical backups logs, receive email notifications, etc..

clip_image004

clip_image005


How much does it cost?

Like most services in the cloud its formula is pay per use, and although the current formula adheres to a single offer of 8€/month (31 uses per month), I guess in the coming weeks will be appearing more options for price escalation as recognized by the Richard Mitchell on the home page.

It should be noted that this price is for the backup service. Does not include storage costs for Azure Storage (storage account isyour own), nor the costs of traffic in the case of using external storage like Amazon or FTP account.

On the other hand, is also offering a free trial period of 10 days without charge.

Conclusion

A few weeks ago, I commented that I upgraded to DotNetNuke 6.1.3 three different sites running on Azure in just 9 minutes, including backups. Now you know the method used to back up the databases. The part of details of how to do the upgrade of DNN sites on Azure I leave for another post.

While the current service could offer much more, precisely Redgate people are taking good note of each new required feature. Believe me, I had the pleasure of having applied for a feature and implemented within a reasonable time. Indeed, it seems that the service will offer many more options soon, as being able to deploy and/or eliminate Azure deployments  in a scheduled way.

clip_image006

What I like: scheduling and to receive daily email notifications telling me that the SQL Azure backup has been successful. Although it may seem silly, reassures ... a lot. Have I discussed with you my incident when I clicked the "Delete Azure SQL server" instead of "Delete Azure Database"? Well, that's another story...

For more information, visit:
http://cloudservices.red-gate.com/

Happy coding!

Posted: 25/2/2012 16:19 por David Rodríguez | con no comments
Archivado en:
Más artículos < Página anterior - Página siguiente >