Un paseo por las nubes

Un blog acerca de Cloud Computing...
Windows Azure PowerShell: One script to rule them all

Are you in mobility and you have lots of SQL Azure DB Servers to manage? Does your public IP address change often and you’re sick of having to manually change the SQL Azure firewall rules?

Good news, I’m going to show you a PowerShell script to automatically add a firewall rule to ALL your SQL Azure servers in ALL your subscriptions for your current public Internet IP Address.

PowerShellDownloadBefore start, just be sure that you have installed the latest Windows Azure PowerShell package, that you can download from http://www.windowsazure.com/en-us/downloads/#cmd-line-tools

Setup your WA PowerShell subscriptions

The first part after downloading the Windows Azure PowerShell package is to setup the subscriptions you have access to. You will need to do this process only once, since the configuration settings will be stored in your profile, but perhaps you would like to revisit it later to add more subscriptions.

Configuring subscriptions by importing a .publishsettings file

The fastest way to setup the subscriptions is by importing a .publishsettings file containing an encoded management certificate data and subscription Ids:

1) Download your publish settings file:

PS C:\> Get-AzurePublishSettingsFile

This will open a browser that, after introducing your LiveId, will automatically download your .publishsettings file. This file contains credentials to administer your subscriptions and services, so be sure to store it in a secure location or delete after use.

2) Import your .publishsettings file:

PS C:\> Import-AzurePublishSettingsFile MyAzureCredentials.publishsettings

These settings will be stored inside “C:\Users\<UserName>\AppData\Roaming\Windows Azure PowerShell” folder.

Configuring subscriptions by using self-signed management certificate

Another way to setup your subscriptions would be to use your own self-signed management certificates, to avoid the automatic creation of management certificates in all your subscriptions and giving you more control on which subscriptions you are going to manage via PowerShell.

1) Create and Upload a Management Certificate for Windows Azure. Follow the instructions described in this MSDN article.

2) Run the following PowerShell script to access your subscription from PowerShell:

$subscriptionId = '<type your subscriptionId here>'
$subscriptionName = '<type a subscription name here>'
$thumbprint = '<paste your management certificate thumbprint here>'
$mgmtCert = Get-Item cert:\\CurrentUser\My\$thumbprint
Set-AzureSubscription -SubscriptionName $subscriptionName -SubscriptionId $subscriptionId -Certificate $mgmtCert

You can repeat this operation for each subscription you want to manage from PowerShell.

Finally, with both ways of configuring your Azure Subscriptions, you can verify which subscriptions you have setup by running “Get-AzureSubscription” Cmdlet.


One script to rule them all

Now that we have setup the subscriptions, the intention is to create a firewall rule in ALL the SQL Azure servers under ALL my subscriptions for my current public IP address, in order to manage them by using SQL Server Management Studio or whatever other tool.

Based on Alexander Zeitler’s blog post on the matter, I have added some modifications to build the following script that you can save in .ps1 file (I have called it RuleThemAll.ps1 Smile).

# Set a RuleName
$ruleName = "David Laptop"
# Get your public Internet IP Address
$externalIP = (New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]"
# Loop all your subscriptions
Get-AzureSubscription | ForEach-Object { 
    Select-AzureSubscription $_.SubscriptionName
    # Loop all your SQL DB servers
    Get-AzureSqlDatabaseServer | ForEach-Object {
        $rule = Get-AzureSqlDatabaseServerFirewallRule -ServerName $_.ServerName -RuleName $ruleName
        if (!$rule) {
            New-AzureSqlDatabaseServerFirewallRule $_.ServerName -RuleName $ruleName -StartIpAddress $externalIP -EndIpAddress $externalIP 
        else {
            Set-AzureSqlDatabaseServerFirewallRule $_.ServerName -RuleName $ruleName -StartIpAddress $externalIP -EndIpAddress $externalIP 

After a while, you will have the rule enabled in all your servers in all your subscriptions.


Hope this helps,

David Rodriguez

Posted: 25/9/2013 11:40 por David Rodríguez | con no comments
Archivado en:
DNN Azure Accelerator 2013 Q3 Released

DNNPoweredByAzureHi, today I have released a new version of the DNN Azure Accelerator, the tool to deploy DNN Platform instances on Windows Azure by using cloud services (PaaS model).

You can download the latest version from CodePlex:

New features

The new features included in this release need deeper details:

  • Packages and solution upgraded to Azure SDK 2.1: all the packages has been rebuilt by using the latest Azure SDK version available, that comes with more features and support for the latest cloud services features. Check the Azure SDK 2.1 release notes for more information. Note that the previous Accelerator packages were built using the SDK 1.8;
  • Changed the use of a mapped network drive for a symbolic link: to avoid remapping issues executing “net.exe use” and “net.exe delete” commands, the new method for mapping the network location has been introduced by using a symbolic link to the network share. As a consequence, you will no longer see the X: mapped network drive. To access the drive contents:
    • From the webrole that mounted the drive, you can access the drive contents by browsing F: drive (or B: if it’s the first mount)
    • From any webrole, included the one that mounted the drive, you can access the drive contents by browsing “C:\Resources\Directory\<RoleDeploymentId>.DNNAzure.SitesRoot\root”. Note that the alias “C:\Resources\Directory\sites\root” is also available, and it’s the one being used by IIS
  • Support for Web Platform Installer custom feeds: now you can specify a custom feed Url for Web Platform Installer, so you can automate the installation of custom addons using this way. To build your own custom feeds, check this blog post.

Another important thing that changed on this release, is that Azure Connect is no longer supported in favor of Virtual Network, so the Connect step in the Wizard has been removed. The new step to setup Virtual Network through the wizard has not been included in this release, but you can get it working by including your virtual network settings directly on the .cscfg files before starting to create the cloud service. For more information about how this can be achieved, check the Windows Azure Virtual Network Configuration Schema documenation.

Release notes

New Features

  • Packages and solution upgraded to Azure SDK 2.1
  • Changed the use of a mapped network drive for a symbolic link to avoid remapping issues (you will not see the mapped X: drive anymore)
  • Support for Web Platform Installer custom feeds
  • Rebranding changes


  • Fix for the CA2 certificate thumbprint that was being ignored
  • Fix for WebDeploy and FTP services while working on HA mode
  • Fixes around the drive unmount/mount logic when a failure is detected
  • Fix to include the databaseOwner and objectQualifier settings while creating the portal aliases for the Offline site
  • Fix to shorten the symbolic link path length (see http://geeks.ms/blogs/davidjrh/archive/2013/06/18/path-too-long-when-using-local-storage-in-an-azure-cloud-service.aspx for more info)
  • Implemented the RoleEnvironment.StatusCheck to programatically change the instance status from Busy to Ready after successfully setting up the IIS
  • Fix on the Compete for the lease process, causing a "Value cannot be null" exception after a deployment upgrade
  • Fix to modify the default connection limit to a higher value to avoid inrole caching connection timeouts
  • Fix to avoid 404 errors while calling the automatic installation process
  • Fix to add support for East US and West US in the accelerator Wizard


  • Azure Connect has been deprecated in favor of Virtual Networks. All Azure Connect support has been removed


Un saludo y happy coding!

[Event] CloudBurst 2013: the Sweden Windows Azure Group Developer Conference

CloudBurst2013CloudBurst is a Windows Azure developer conference run by the Sweden Windows Azure Group (SWAG). The event features two days of sessions from Windows Azure community and industry leaders and provides real-world content for Windows Azure developers and those wanting to explore the platform. The focus will be on developing Windows Azure applications and real-world cloud-based solutions.

The event will run for two days on September 19 - 20, 2013 at the headquarters of Microsoft in Stockholm, where the "top" Azure MVPs will share sessions around the Windows Azure platform. Organizers for SWAG are the two Swedish Windows Azure MVPs Alan Smith and Magnus Mårtensson.

The event is free to attend and if can’t go to Stockholm for the date don’t worry, the event will be streamed via Microsoft World Wide Events. You have all the information on the CloudBurst 2013 website:

CloudBurst 2013 event information

And don’t loose the “DNN Cloud Services – Under the Hood” session!

ReadySetGoIt is my pleasure to participate as a speaker in a session to discuss how we implemented DNN Cloud Services on the Windows Azure platform. For an hour I will be showing some details of the most interesting subsystems as the DNN Verification Extension Service created using Azure cloud services and messaging queues; how we have deployed about 20,000 instances of product trials with Windows Azure Pack for Windows Server on Virtual Machines and all fully automated; or how we have built a backend system using a CQRS pattern and able to deploy DNN instances on any infrastructure, from web Sites to Cloud Services.

See you in Stockholm!

Un saludo y “Happy Kodning”!!

PS: Did I tell you that you can still get an Aston Martin? Smile

[Evento] CloudBurst 2013: estos suecos se han vuelto locos!!

CloudBurst2013CloudBurst es una evento para desarrolladores de Windows Azure organizada por el grupo de usuarios de Windows Azure de Suecia (SWAG). El evento transcurre durante dos días llenos de sesiones de líderes de la comunidad e industria de Windows Azure, ofreciendo contenido de mundo real para desarrolladores de Windows Azure y también para aquellos que deseen explorar la plataforma.

El evento se desarrollará durante dos días, entre el 19 y 20 de septiembre de 2013 en la sede de Microsoft de Estocolmo, donde los “top” Azure MVPs compartirán sesiones alrededor de la plataforma. Los organizadores del grupo de usuarios SWAG son los dos Windows Azure MVPs Alan Smith y Magnus Mårtensson.

La asistencia al evento es totalmente gratuita y si te queda algo lejos no te preocupes, que también habrá streaming en directo a través de Microsoft World Wide Events. Tienes toda la información en el sitio web de CloudBurst 2013:

Información y registro de CloudBurst 2013

¡Y esta vez la lío con ellos!

ReadySetGoEs para mí un placer poder participar como ponente en una de las sesiones para hablar de cómo hemos implementado DNN Cloud Services sobre la plataforma Windows Azure –en este en post de MSDN Spain puedes encontrar información relativa al tema. Durante una hora mostraré los detalles de los subsistemas más interesantes como el DNN Extension Verification Service creado usando Azure cloud services y colas de mensajería; cómo hemos creado cerca de 20.000 instancias de pruebas de producto con Windows Azure Pack para Windows Server sobre Virtual Machines y todo de forma totalmente automatizada; o cómo hemos construido un sistema de backend mediante un patrón CQRS capaz de desplegar DNN sobre cualquier infraestructura, desde Web Sites hasta Cloud Services.

Nos vemos en septiembre.

Un saludo y “Happy Kodning”!!

P.D. ¿Te había dicho que todavía puedes conseguir un Aston Martin? Smile

“Path too long” when using local storage in an Azure Cloud Service

imageIt is insane that in 2013 we still try to workaround the 260 character limit in a file path, more when the conversations are centered on services, scaling and other meta-cloud philosophies.

But this problem is still here and working with VMs hosted in the cloud is no different, on-premise problems will appear in the same way when online. I would recommend the “Long Paths in .NET” series from Kim Hamilton where this matter is deeply discussed. The post is from more than 6 years ago…and this is not solved yet.

So let’s talk about the problem I had. When using local storage on an Azure web or worker role, the root location for this storage while running on Azure starts with a path that can “eat” almost the half of the MAX_PATH -note that I’m not referring to the problem when playing on DevFabric in your local environment, whose solution is commented on this MSDN blog post. This will be something like:


As example:


The problem is that the RoleDeploymentId is 32 char length, and if you want to keep some sanity on your role names and storage names you will use something that has some meaning. In my case, the path was “eating” 108 chars, almost the half of the max path. While creating some recursive folders inside that temp path the “Path too long” error will appear sooner than later.

Techniques from the past to solve problems from the past

After playing a little bit with Subst.exe, didn’t convince me because I was trying to keep distance from mounting and managing drives between different user sessions. But then César Abreu give an interesting idea: why not use old style DOS format for the paths?

Interesting approach, so after some reading on the Fsutil.exe documentation on TechNet, I did some tests on a running instance:

1) Enable the short name behavior for volume C:


2) Add a short name to the local storage folder


3) Verify


I finally created a simple two line startup task to be executed with elevated privileges and that would give me an additional 83 characters.

REM Enable short names on volume C:
fsutil.exe 8dot3name set c: 0

REM Add a short name to the local storage folder
fsutil.exe file setshortname "C:\Resources\Directory\%RoleDeploymentID%.MyWebRole.MyLocalStorage" S

The first line enables the short name behavior for volume C:. I noticed that this is enabled for other volumes on an Azure role, but is not enabled by default on C: drive. The second line simply sets the folder short name as “S”. With this I can use then the path “C:\Resources\Directory\S” instead of the long one, and worked like a charm. Note that you can’t do the same for “Resources” and “Directory” folder names, since they are in use during the role startup, and would give you an error while trying to do the operation.

Hope this helps!

Windows Azure: disponibilidad general de Infraestructura como Servicio (IaaS)

imageUno de los acrónimos que más está de moda en nuestros mundos de Azure es del de “GA”, que significa el cambio de un servicio en modo “Preview” a disponibilidad general (del inglés General Availability), pasando de ser un servicio con soporte limitado a un producto totalmente soportado, con sus SLAs, precios definitivos, etc. Pues hoy es uno de esos días en los que oyes por ahí: ¡Hey, que Windows Azure IaaS es ahora GA!

Y es que también es normal encontrarnos con alguna sorpresa cuando un producto pasa a ser GA, normalmente como “regalito” que acompaña el lanzamiento. Lo que era menos de esperar era que esos anuncios incluyeran co-lateralmente mejoras en precios en otros servicios como cloud services. ¿Más barato? Oh yeah!

Aquí podéis ver en detalle el anuncio de Scott Guthrie en su blog con todo lujo de detalles. No voy a copiar aquí todos ellos, sino que voy a hacer incidencia en lo que me parecen los 3 grandes noticiones de esta puesta en marcha de IaaS en Windows Azure.

Nuevas plantillas de VM

Una de las grandes novedades es que a partir de ahora ya puedes desplegar una máquina con SQL Server, BizTalk Server o Sharepoint sin tener que hacer frente al pago de la licencia completa del software de servidor, sino que continuando con el modelo de pago por uso, existe la modalidad del pago de un sobrecoste adicional al precio de hora estándar de computación. Hora que usas, hora que pagas. No lo usas, no lo pagas. Fácil.

En el caso de SQL Server, nos encontraremos con plantillas de SQL Server 2012 Standard y Enterprise desplegados sobre Windows Server 2008. Si bien ya hay precio para la edición Web, no hay plantilla para desplegarlo.

Para BizTalk también encontraremos plantillas para las ediciones de evaluación, la Standard y Enterprise. Para el caso de Sharepoint, aún no están disponibles los precios, aunque sí que está la plantilla de Sharepoint Server 2003 Trial.


Nuevos tamaños de máquina XXL y XXXL (A6 y A7)

Otra de las grandes novedades es la posibilidad de desplegar instancias de uso intensivo de memoria, viniendo a duplicar el tamaño ExtraLarge que teníamos hasta ahora en lo que a memoria RAM se refiere. De este modo, los tamaños de instancias irán desde A0 hasta A7, cada una duplicando en memoria a la anterior. OJO: no me preguntéis dónde se dejaron A5 (esto trataré de averiguarlo):



Nuevos precios reducidos, ¡y no sólo para IaaS, también para PaaS!

Por último, una de las terceras grandes novedades es el anuncio de una reducción de precios de un 21% sobre Windows Azure Virtual Machines (IaaS) y de un 33% de reducción de precios en soluciones desplegadas bajo modelo PaaS (toma ya! un 12% de rebaja adicional si despliegas DNN en modelo PaaS con el Accelerator!!!). Estos nuevos precios casan con la oferta actual bajo demanda de Amazon, tanto para máquinas Windows como Linux.

Cabe recalcar que si bien Windows Azure Virtual Machines (IaaS) está disponible generalmente desde hoy 16 de abril, se continuará ofreciendo el precio con descuento de la Preview hasta el 31 de Mayo. Los nuevos precios de GA tendrán efecto a partir del 1 de junio.

Precios para modelo IaaS


Precios para modelo PaaS


Toda la información de los nuevos tamaños de máquina y sus precios los puedes encontrar en este enlace: https://www.windowsazure.com/en-us/pricing/details/virtual-machines/


En este post he comentado las que me parecieron las tres principales novedades incluidas en este lanzamiento, pero hay muchas otras y otros pequeños huevos de pascua –¿comenté que ahora los VHD de S.O. son de 127Gb, o que puedes cambiar el nombre del usuario “Administrator”?-, así que no olvides visitar el post original de Scott Guthrie.

Por lo que he podido experimentar después de haber desplegado cerca de 100 servidores en modo IaaS desde su salida en modo Preview en Junio de 2012, el servicio de Windows Azure Virtual Machines ha ido mejorando en rendimiento, confiabilidad y disponibilidad. De hecho, el principal problema que podíamos encontrarnos a fecha de hoy era que al estar en modo Preview, no era un producto totalmente soportado con sus acuerdos de niveles de servicio. Con el lanzamiento de hoy, esto lo cambia todo, ya que todas los despliegues que tuvieras pasan a tener soporte y por lo tanto, pasa a ser un lugar donde puedes poner tus despliegues de producción.

Veremos qué más sorpresas nos traen nuestros amiguetes de Microsoft en los próximos meses. Están que lo petan con tanto anuncio.

¡Un saludo y happy coding!

Posted: 16/4/2013 16:19 por David Rodríguez | con no comments
Archivado en:
Pidiendo una de camarones mientras tu sitio autoescala en Azure

CamaronesAzureDespués de la salida de la última versión 6.4 del DotNetNuke Azure Accelerator que, recordemos, añade soporte para alta disponibilidad de tus sitios web con DotNetNuke en Azure, llega el momento de probar opciones de autoescalabilidad para ajustar la capacidad a la demanda y como no, ahorrar en costes.

No sé si todos sabréis de una de las últimas adquisiciones de Microsoft. Se trata de la startup MetricsHub, cuyo principal foco es la monitorización y automatización de escalado de despliegues realizados sobre Windows Azure, para sacar el mayor partido posible a la flexibilidad y valor a nuestras soluciones en la nube. Lo mejor de esta adquisición es que como resultado final todos los clientes de Windows Azure pueden activar la versión preliminar de estos servicios a través de la Store de forma…GRATUITA!!!

Las características más destacables de estos servicios serían las siguientes:

MetricsHub Dashboard ActiveScale desde MetricsHub Notificaciones
Completo cuadro de mandos con un resumen de los datos más importantes de tu servicio en la nube ActiveScale mantiene tu servicio en condiciones cuando la carga aumenta, del mismo modo que decrementa los costes Envío de alertas a través de correo electrónico e integración con PagerDuty

Ver video

Ver video

Ver video

metrics_hubSi quieres saber más sobre esta adquisición sigue este anuncio en los blogs de MSDN: “Microsoft Acquires MetricsHub”.

En este artículo veremos un paso a paso sobre cómo activar la monitorización de nuestro sitio DotNetNuke desplegado sobre Windows Azure, así como habilitar las opciones de autoescalado y notificaciones para poder irnos a tomar tranquilamente una tapa de camarones a la playa mientras las máquinas trabajan por nosotros.

IMPORTANTE: para que las funciones de autoescalado funcionen correctamente, debes haber desplegado tu sitio web al menos con la versión 6.4 del DotNetNuke Azure Accelerator.

Activando MetricsHub en nuestra suscripción

Para comenzar a examinar las opciones de autoescalado de nuestra instancia DotNetNuke sobre Windows Azure en modo PaaS (una instancia desplegada como un “cloud service” con el Accelerator, no como un Azure Website), lo primero que tenemos que hacer es habilitar las opciones de monitorización en nuestra suscripción. Para ello realizaremos los siguientes pasos:

  1. Iniciar sesión en la consola de administración de Windows Azure en https://manage.windowsazure.com
  2. En la barra de comandos inferior, pulsamos sobre “Nuevo” y luego en “Store”
  3. En la pantalla de selección de Add-ons, buscar “Active Cloud Monitoring” (ahora mismo aparece como el primero de la lista)
  4. Al pulsar siguiente, nos congratula ver que efectivamente el servicio es GRATUITO. Pero OJO: en la región, indica la misma localización donde tienes ubicados tus servicios cloud, ya que de lo contrario puede incurrir en gastos de tráfico saliente desde tus cuentas de almacenamiento donde se está guardando la información de diagnóstico.
  5. Al pulsar siguiente, podemos volver a ver cómo el servicio es gratuito. Aún no se han ofrecido detalles de cómo evolucionará este servicio. Por ahora, el límite que he podido constatar es de que no admite monitorización de más de 150 servidores, límite más que aceptable.
  6. Al pulsar sobre finalizar, se comienza a desplegar nuestro servicio “Active Cloud Monitoring”, y al cabo de unos segundos ya está todo listo para comenzar a configurar la monitorización
  7. Al pulsar sobre el Add-on, nos lleva al Dashboard del servicio en Azure, aunque no será desde este portal donde accedamos a toda la información. Para hacer esto último, pulsamos sobre el enlace de visitar la web de “MetricsHub, Inc” para los pasos siguientes:
  8. Una vez en el sitio de MetricsHub, el primer paso es configurar qué subscripciones y/o servicios queremos monitorizar. Para ello es necesario que subamos el fichero “.publishsettings” generado por nuestro portal (que contendrá un certificado de administración serializado y los ids de suscripción que puede administrar). Este proceso se realiza en dos pasos automáticos siguiendo las instrucciones en pantalla
  9. Llegó la hora de indicar qué suscripciones y/o servicios queremos monitorizar. Seleccionamos los que queremos –más tarde podremos añadir o quitar desde las opciones de administración de la cuenta- y le damos al botón de comenzar, proceso que tarda unos minutos en finalizar.
    Por el momento el servicio monitorizará cloud services (PaaS), Windows Azure Websites, espacio en cuentas de almacenamiento y máquinas virtuales (IaaS). Para estas últimas, tendrás que hacer el paso adicional de instalar un agente local que envíe los datos de monitorización. Como el DNN Azure Accelerator funciona sobre PaaS, no tendrás que realizar ninguna operación adicional de este tipo.

Jugueteando con la monitorización

Una vez que está todo configurado, es el momento de permitirle unos minutos al servicio para que comience a obtener los datos de diagnóstico. Una de las cosas que me llama la atención es que toda la interfaz de usuario se ha implementado mediante “Responsive design”, con lo que puedes acceder desde cualquier dispositivo móvil sin problemas ya que éstas se ajustan dinámicamente al tamaño de pantalla en cada dispositivo.


Una vez que le hemos dado tiempo a obtener datos, veremos como las gráficas de monitorización comienzan a funcionar dentro de cada servicio.

Como ejemplo, veamos la monitorización de un site de DNN desplegado en modo de alta disponibilidad con un mínimo de 2 instancias ExtraSmall. Veremos 3 niveles de monitorización de un servicio cloud –que podremos personalizar añadiendo más o menos datos a las gráficas y tablas de datos-.

El primer nivel de monitorización es a nivel general del servicio cloud:


Como vemos, el uso de memoria está bastante ajustado ya que en el ejemplo usamos máquinas ExtraSmall con sólo 768Mb de RAM.

Al pulsar sobre el role “DNNAzure” accedemos al segundo nivel de monitoración a nivel de Role, donde podemos a nivel general las estadísticas para cada uno de los roles de uso de CPU, memoria, operaciones de lectura y escritura en disco así como tráfico de red entrante y saliente, todo en una sola pantalla muy bien consolidado.


Por último, al pulsar sobre el nombre de una de las instancias de role, por ejemplo “DNNAzure_IN_0”, accederemos al tercer nivel de monitorización a nivel de instancia, donde podremos monitorizar hasta a nivel de proceso!!!


Habilitando el autoescalado con ActiveScale

Bueno, la tapa de camarones y la caña están servidas sobre la mesa y queremos tomárnosla tranquilamente. ¿Qué hacemos? Pues activamos el autoescalado para no tener que preocuparnos de si el rendimiento del sistema es el adecuado a la vez que reducimos los costes a la carga de cada momento.

Para ello, accedemos a la configuración de ActiveScale desde el nivel 1 (cloud service) o nivel 2 (role) de monitorización del cloud service:


Y aquí las opciones más interesantes del servicio, no sólo porque permiten autoescalado automático basándose en el uso del site, sino que además permite habilitar tareas automáticas de mantenimiento de salubridad del sistema –que denominan “Automatic Healing”, como por ejemplo, reiniciar una instancia de role si se está por encima de un umbral de CPU durante un tiempo determinado, etc.


Habilitando las notificaciones

Bueno, además de que el sistema se ajuste a la carga, se autorecupere, etc. queremos recibir notificaciones de alerta por correo electrónico, por SMS, iOS messages, etc. si alguno de los servicios sufre algún incidente. ¿Qué hacemos? Alegremente vemos que este servicio también está incluido dentro de MetricsHub. Para habilitarlo, accedemos al menú de notificaciones desde la página de inicio pulsando sobre el menú “All Issues”.


Desde aquí podemos ver el histórico de incidencias en todos los servicios, tanto actuales como pasadas:


Pulsando sobre el botón de “Get Email Notifications…” podemos configurar cada una de las reglas para el envío de alertas por correo electrónico. Las opciones de activación de estas reglas se pueden parametrizar a través de la supervisión de umbrales de contadores, además de poder combinarlos entre ellos para la configuración de una regla:


Para acceder a la configuración de notificaciones por SMS, etc. simplemente tienes que crear una cuenta en PagerDuty. Este servicio es de pago, contando con una trial de 30 días.


Después de haber puesto en marcha un ejemplo de despliegue y hacer algunas pruebas de carga sobre el sistema he podido ver que efectivamente el servicio autoescala hacia arriba y abajo pasado el tiempo configurado. Las notificaciones llegan como se esperan y el detalle de las mismas es muy bueno. Acceder al interfaz de usuario desde dispositivos móviles cuando no estás delante de tu PC de sobremesa es genial, sobretodo cuando se comporta tan bien mostrando gráficas y todo tipo de detalles.

Recordando que este servicio se ofrece en modo “preview” de forma gratuita, sólo queda esperar qué se nos ofrecerá en un futuro. Yo por ahora, “lo compro” Smile

Me voy a por la tapa de camarones.

Un saludo y Happy Coding!

DotNetNuke Azure Accelerator 6.4 Released!

DNNCloudThe new DotNetNuke Azure Accelerator 6.4 is now available on CodePlex with very interesting new features, such as the awaited high availability, the automated SSL certificates setup, FTP and WebDeploy management, as well as a last-minute addition that allows to set the site offline to perform maintenance tasks. To download the latest version follow this link:

Download DotNetNuke Azure Accelerator 6.4

Release notes

New features

  • Changed the packages to use OSVersion=3 by default: Windows Server 2012 and IIS 8
  • Added Support for active and passive FTP. You can enable it in the wizard on the remote option settings step
  • Added a new package supporting co-located cache. Note that you still will need a DNN caching provider that implements it.
  • Changed IIS 8 settings to use site pre-load
  • Changed the appPool Startup mode to AlwaysRunning (see thishttp://blogs.msdn.com/b/vijaysk/archive/2012/10/11/iis-8-what-s-new-website-settings.aspx for more info)
  • Modified all the packages to support High Availability: now you can safely increase or decrease the number of roles serving the website. The VHD drive will be dinamically attached, shared and connected between all the workers. The process will recover from failures when the VM acting as SMB server goes down for whatever reason.
  • Support for App_Offline to do safer DNN upgrades stopping incoming webrequests. When you change the configuration setting "AppOffline.Enabled" to "true", the site will appear as offline but will be published on port 12242. You can then run the upgrade on that port (portal aliases will be dinamically added). After finishing the upgrade, set the "AppOffline.Enabled" to "false" to re-enable the site.
  • App_Offline file can be customized by dropping an HTML file on "/Portals/_default/App_Offline.htm
  • Added a new step in the wizard to setup SSL configuration, allowing to upload the SSL certificate and CA's certificates
  • Now you can reload the packages in the wizard without having to restart the process
  • The last subscription used will be the default one when launching again the wizard




Getting Started

The summary of steps for deploying DNN Community on Windows Azure is:

    1. You can sign-up for a free 3 month trial here http://www.windowsazure.com/es-es/pricing/free-trial/
    1. Download the DotNetNuke Wizard Accelerator package and uncompress it
    2. Run DNNAzureWizard.exe and follow the steps

If you have any comment or you find an issue, remember to visit the CodePlex discussion forums.

Enjoy it!

DotNetNuke Azure Accelerator 6.4 ya disponible!

DNNCloudYa está disponible en CodePlex la última versión del DotNetNuke Azure Accelerator con una serie de características muy interesantes, como la tan esperada Alta Disponibilidad, la configuración automatizada de certificados SSL, el acceso a los contenidos mediante FTP y WebDeploy, así como un añadido de última hora para poner el site offline para realizar tareas de mantenimiento. Para acceder a la descarga de esta última versión puedes seguir el siguiente enlace:

Descargar DotNetNuke Azure Accelerator 6.4

Notas de la versión

Nuevas características

  • Modificados todos los paquetes para soportar Alta Disponibilidad: ahora puedes aumentar o disminuir el número de instancias de rol de forma segura. La unidad VHD será montada y compartida dinámicamente, mientras que los roles cliente buscan y se conectan al recursos compartido del mismo modo. Este proceso se recuperará automáticamente de posibles caídas cuando la máquina virtual que actúa como servidor de ficheros se cae por cualquier motivo (fallo, actualización automática, sustitución del servidor por uno nuevo, etc.)
  • Modificados todos los paquetes para usar OSVersion=3 por defecto (Windows Server 2012 e IIS 8)
  • Añadido soporte para FTP activo y pasivo. Puedes habilitar la configuración automática de los servicios FTP en el paso de opciones de administración remota en el asistente
  • Modificadas las opciones de IIS 8 para usar pre-carga del site
  • Modificada las opciones del pool de aplicaciones para poner el modo de inicio a AlwaysRunning (ver http://blogs.msdn.com/b/vijaysk/archive/2012/10/11/iis-8-what-s-new-website-settings.aspx para más información)
  • Añadido un nuevo paquete con soporte para co-located cache. Nótese que aún así necesitarás un Caching Provider que implemente Windows Azure Cache no incluido en la solución
  • Soporte para App_Offline para realizar operaciones de mantenimiento, como las mismas actualizaciones de DotNetNuke, de forma más segura al no recibir webrequests durante dicho proceso. Cuando cambias la opción de configuración “AppOffline.Enabled” a “true” a través de la consola de administración de Windows Azure, el site aparecerá offline en los puertos 80 y 443, mientras que es publicado en el puerto 12242. De este modo puedes realizar el update en dicho puerto (se añadirán dinámicamente portal aliases para el mismo). Al finalizar las tareas de mantenimiento, vuelve a configurar la opción “AppOffline.Enabled” a “false” para volver a habilitar el site.El App_Offline puede ser personalizado creando un fichero en la ruta “/portals/_default/App_Offline.htm”
  • Añadido un nuevo paso en el asistente para configurar las opciones de SSL, permitiendo subir tanto el certificado del site como el de las entidades emisoras de los mismos.
  • Ahora puedes volver a cargar la lista de paquetes en el asistente sin tener que volver a iniciar el mismo
  • La última suscripción usada será la que esté seleccionada por defecto la próxima vez que inicies el asistente




Si tienes alguna sugerencia o comentario, o detectáis alguna incidencia, recordad visitar los foros de discusión en CodePlex.

¡Que lo disfrutéis!

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


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. 


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.


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.


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
    Removes Windows Azure trace log data from a storage account.
    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>]
    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.
    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.


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”


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:     }
  35:     return GetUnsecuredString(secPassword);
  36: }
  38: private static string GetUnsecuredString(SecureString secureString)
  39: {
  40:     if (secureString == null)
  41:     {
  42:         throw new ArgumentNullException("secureString");
  43:     }
  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: }

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.


  • 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í


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.


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


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.


  • 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")


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.


¿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”:


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”.


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:



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.


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.


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


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:

  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”
  4. Iniciar la instalación haciendo doble click en el archivo y completar el asistente, indicando que cree el acceso directo en el escritorio:

  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

  6. Ejecutar la aplicación e introducir los credenciales de tu suscripción a Canal+
  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


Un saludo y Happy Coding!

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