Syntax Highlighter

domingo, 25 de noviembre de 2012

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!

lunes, 19 de noviembre de 2012

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!

domingo, 21 de octubre de 2012

[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!

lunes, 8 de octubre de 2012

DotNetNuke Azure Accelerator 6.3 Released!

DotNetNukePoweredWA

Since a few minutes ago the new version 6.3 of the DotNetNuke deployment wizard for Windows Azure PaaS -Cloud Services- 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!

¡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!

martes, 2 de octubre de 2012

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!

jueves, 20 de septiembre de 2012

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!

Related Posts Plugin for WordPress, Blogger...