Windows Azure SDK 1.3 + Windows Azure Tools + Nuevo portal disponibles

Ayer por la noche (hora española) se liberó la nueva release del SDK de Windows Azure con varias de las novedades expuestas en el PDC 2010. Cabe decir que las nuevas herramientas para la plataforma sólo están disponibles para Visual Studio 2010.

Para poder descargar el SDK podemos haccerlo a través de este link.

¿Cuáles son las nuevas funcionalidades?

  • Virtual Machine (VM) Role en versión beta: Nos permitirá crear una imagen personalizada usando Windows Server 2008 R2 y usarla en la nube.
  • Remote Desktop Access: Una de las características más esperada por algunos era la posibilidad de conectarnos en remoto a las máquinas virtuales que residen en Azure.
  • Full IIS support in a Web Role: A partir de ahora nos dan la posibilidad de hostear web roles en un entorno de IIS.
  • Virtual Network (CTP): Gracias a esta nueva característica, tendremos la posibilidad de conectar nuestra máquinas ubicadas en la nube con nuestros servidores on-premise como si de una red VPN se tratara.
  • Diagnostics: Se mejora la recolección de diagnósticos con más condiciones de error.
  • Networking Enhancements: Se habilitan roles para restringir el tráfico inter-rol, además de arreglar los puertos en los InputEndpoints.
  • Performance Improvements: Se realizan mejoras de rendimiento en el deployment en el entorno local.
  • Nuevo portal en Silverligth: Si bien todavía no está totalmente disponible en SL y para algunos servicios tendremos que utilizar el antiguo portal (por ejemplo, para el apartado de App Fabric) ya podemos disfrutar de la mayoría de las funcionalidades en un portal considerablemente mejorado.

Modificaciones en las tools de Visual Studio

De lo primero que me percaté fue del cambio de nombre de las herramientas Development Fabric por Compute Emulator y Development Storage por Storage Emulator.

En la GUI de configuración de los roles, tenemos nuevas opciones disponibles:

1. Aparece el nuevo tamaño Extra small para nuestros roles:

2. Configuración de la cadena de conexión para los diagnósticos desde el GUI (hasta el día de hoy debíamos modificar este valor desde la pestaña Settings)

3. Nueva pestaña para la red virtual

Curiosidades

Para conocer las tareas disponibles de una forma más usable, tenemos a nuestra disposición una barra de tareas con todo lo que podemos crear:

Las tres primeras ya son conocidas: las dos primeras se han dividido para dar una mayor visibilidad, ya que son servicios distintos, la tercera correspondería con SQL Azure y una cuarta con la creación de redes virtuales (Azure Connect).

A partir de ahora, cuando publicamos un nuevo deployment y este solamente consta de una instancia en alguno de los roles, nos aparecerá un aviso, recomendando un número de instancias mayor para obtener alta disponibilidad.

Por cada deployment tenemos una pestaña lateral que nos muestra información relativa a la misma, alguna de ella no disponible hasta ahora.

Además, tenemos un apartado de tareas comunes donde podemos ver también nueva funcionalidad como crear cuentas de administrador, conectar los equipos on-premise con Windows Azure o administrar las imágenes de las VMs.

Para conocer más sobre las nuevas características, ya podemos descargar la nueva versión de Windows Azure Training Kit 😀

¡Que lo disfrutéis! 🙂

¡Saludos!

EXECUTE permission denied on object ‘sp_sdidebug’, database ‘master’, owner ‘dbo’. con la depuración automática

Esta mañana, estaba depurando un código fuente de terceros que tenía que integrar en un proyecto y no devolvía el resultado esperado. Mi sorpresa al intentar abrir una conexión con la base de datos, mientras depuraba, es la siguiente:

EXECUTE permission denied on object 'sp_sdidebug', database 'master', owner 'dbo'.

Este error sucede cuando no tenemos permisos en el procedimiento almacenado sp_sdidebug… y es posible que no sea necesario tenerlo por motivos de seguridad desde nuestra aplicación.

Para solucionarlo, simplemente debemos seleccionar Attach to process… en el menú Debug y modificar el Attach to: Native code a Managed code.

El motivo de este error es que, al tener la depuración en modo nativo de forma automática, intenta depurar absolutamente todo y necesita más privilegios de los que en algunas ocasiones tenemos.

Ya podemos depurar sin problemas 😀

Espero que sea de utilidad.

¡Saludos!

Mad.Nug: Migración de aplicaciones VB 6 a .NET ¿mito o realidad? ¿huevo o gallina?


¡Buenos días a tod@s!


Este mes tenemos en Mad.Nug un tema más que interesante para mucho de nosotr@s: la migración de aplicaciones de VB 6 a .NET 😀


Si bien en ocasiones este llega a ser un tema incluso tabú :P, debemos estar preparados para enfrentarnos a los problemas que puedan ir surgiendo de este escenario.


Para esta mesa redonda contaremos con Jorge Serrano para ayudarnos antes las grandes y pequeñas dudas que puedan ir surgiendo al respecto.


El evento será el miércoles 24 de Noviembre en las oficinas de Microsoft Ibérica.


Más información.


¡Os esperamos!

Greybox: La aplicación que nos avisa de nuestros deployments en Azure


Todos aquellos que estemos trabajando o realizando pruebas con Azure tenemos ese miedo común a dejar alguna aplicación de prueba corriendo en la nube generando gasto alegremente 😀 Para evitarlo, o al menos ser conscientes de que tenemos aplicaciones en staging o producción, tenemos a nuestra disposición una pequeña aplicación llamada Greybox que nos alerta de los deployments activos y nos permite eliminarlos de manera sencilla.


Para descargarla, podemos hacerlo a través de su página en Codeplex. Por último, Debemos descomprir el zip y modificar el archivo de configuración Greybox.exe.config.

<?xml version=»1.0″ encoding=»utf-8″ ?>
<configuration>
  <appSettings>
    <add key=»SubscriptionId» value=»–ADD YOUR SUBSCRIPTION ID HERE–«/>
    <add key=»CertificateThumbprint» value=»–ADD YOUR CERTIFICATE THUMBPRINT HERE–«/>
    <add key=»RefreshTimerIntervalInMinutes» value=»10″/>
  </appSettings>
</configuration>

Para poder acceder a nuestra cuenta de la plataforma, es necesario indicar el ID de la suscripción, el cuál podemos localizarlo aquí:



Y asociar el Thumbprint del certificado que queramos usar para realizar las tareas de administración que necesita el programa. Para crear y subir un certificado podemos guiarnos por el siguiente post.


Una vez que tenemos todo configurado, hacemos doble click sobre Greybox.exe y veremos que aparece un nuevo icono en el area de notificación de color gris.




Si una aplicación es desplegada en la nube el icono cambiará y mostrará una ventana emergente alertándonos de la nueva subida.



A partir de este momento el icono se tornará azul y tendremos a nuestra disposición dos opciones si pulsamos con el botón derecho sobre el icono.



Por un lado tenemos la posibilidad de elegir qué deployment es el que queremos eliminar o bien si queremos eliminarlos todos. Si por ejemplo seleccionamos el deployment que tenemos activo una nueva ventana nos avisaría de la acción.



El proceso puede tardar algunos segundos. Una vez eliminado desaparecería de la lista y si únicamente existiera el deployment que acabamos de eliminar el icono volvería a su estado gris.


Espero que sea de utilidad 😀


¡Saludos!

Administración de certificados digitales en Windows Azure


Uno de los temas que podría interesarnos sobre la plataforma Windows Azure es si existe la posibilidad de administrar certificados digitales. Lo primero que debemos saber acerca de los certificados utilizados en Azure es lo siguiente:



  1. A día de hoy, podemos subir un total de 5 certificados a través del portal.

  2. El estándar utilizado es X.509.

  3. Es posible revocar cualquiera de ellos en cualquier momento.

  4. Son necesarios para realizar tareas con la API de administración.

  5. Podemos utilizar certificados firmados por nosotros mismos.

  6. Los certificados deben utilizar la extensión .cer.

Generar nuestros propios certificados


Para poder experimentar y/o testear nuestra aplicación podríamos hacer uso de un certificado creado por nosotros mismos. Una forma de generarlos es a través de la herramienta makecert utilizando la línea de comandos. El primer paso para comenzar a utilizar la herramienta es acceder a la consola Visual Studio Command Prompt, alojada en Visual Studio Tools, con privilegios de administrador. Un comando válido podría ser el siguiente:

makecert -pe -r -n «CN=ReturnGis» -a sha1 -len 2048 -ss My «MiCertificado.cer»

Más información sobre makecert.


Agregar certificados


Dependiendo del entorno en el cual queramos hacer uso de nuestro certificado, el modo de añadirlo es distinto.


Máquina local


El primer paso para asociar un certificado en el entorno de desarrollo es ubicar el mismo en el almacén de certificados para que sea localizado. Desde el menú de inicio ejecutamos el comando mmc y agregamos el complemento Certificados, administrando los certificados de Cuenta de equipo. Dejamos marcado Equipo local y pulsamos Finalizar para terminar con el asistente.



Nos posicionamos en el apartado Personal y a través del botón derecho seleccionamos Todas las tareas => Importar y seleccionamos el certificado que acabamos de crear. Pulsamos «Siguiente» en cada una de las ventanas, hasta finalizar el asistente 😀


Abrimos nuestro proyecto en Visual Studio y hacemos doble click en la carpeta Roles sobre el rol donde vamos a utilizar el certificado. Una vez dentro de la configuración, vamos al tab Certificates y añadimos uno nuevo. Si hacemos click en el botón de Thumbprint, nos aparecerán todos los certificados que tenemos disponibles. En este caso aparecería solamente uno que es el que acabamos de crear 😉 Lo seleccionamos y aceptamos.



Si nos fijamos en el archivo ServiceDefinition.csdef vemos un nuevo apartado Certificates:

<?xml version=»1.0″ encoding=»utf-8″?>
<ServiceDefinition name=»Certificates» xmlns=»http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition»>
  <WebRole name=»CertificatesWebRole»>
    <InputEndpoints>
      <InputEndpoint name=»HttpIn» protocol=»http» port=»80″ />
    </InputEndpoints>
    <ConfigurationSettings>
      <Setting name=»DiagnosticsConnectionString» />
    </ConfigurationSettings>
    <Certificates>
      <Certificate name=»Certificate» storeLocation=»LocalMachine» storeName=»My» />
    </Certificates>
  </WebRole>
</ServiceDefinition>

En este nuevo apartado, vemos toda la información mostrada en la UI del Role excepto el Thumbprint. El motivo es debido a que la firma del certificado se encuentra alojada en ServiceConfiguration.cscfg.

<?xml version=»1.0″?>
<ServiceConfiguration serviceName=»Certificates» xmlns=»http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration»>
  <Role name=»CertificatesWebRole»>
    <Instances count=»1″ />
    <ConfigurationSettings>
      <Setting name=»DiagnosticsConnectionString» value=»UseDevelopmentStorage=true» />
    </ConfigurationSettings>
    <Certificates>
      <Certificate name=»Certificate» thumbprint=»9CC153A44988BF6E295C6788AFDC446227414BB1″ thumbprintAlgorithm=»sha1″ />
    </Certificates>
  </Role>
</ServiceConfiguration>

El objetivo de ello es que podamos ser capaces de modificar dicho certificado sin tener que hacer un nuevo deploy de toda la aplicación, ya que no es posible modificar ServiceDefinition.csdef sin tener que hacerlo (a diferencia de ServiceConfiguracion.cscfg).


Live Production


Cuando estemos dispuestos a subir los certificados a la nube, debemos hacerlo a través del portal. Seleccionamos el proyecto en la pestaña Windows Azure sobre el cual queremos utilizarlos (si es que tenemos más de uno) y hacemos click sobre la pestaña Account.



En este caso, seleccionamos el apartado Manage My API Certificates.



Lo único que debemos hacer es subir el archivo .cer correspondiente al certificado y automáticamente se agregará a la tabla de certificados instalados. Si quisiéramos asociar un certificado subido a la nube con la aplicación una vez en producción, bastaría modificar el archivo ServiceConfiguration.cscfg e incluir el Thumbprint correcto.


Configurar el endpoint https para utilizar el certificado


Una vez que hemos configurado el certificado en el tab Certificates, podemos enlazar el mismo a nuestro endpoint https a través del tab Endpoints desde el editor. Para poder hacerlo, basta con activar HTTPS y seleccionar nuestro certificado en SSL certificate name.



El resultado de esta configuración podríamos verlo en el archivo ServiceDefinition.csdef

<?xml version=»1.0″ encoding=»utf-8″?>
<ServiceDefinition name=»Certificates» xmlns=»http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition»>
  <WebRole name=»CertificatesWebRole»>
    <InputEndpoints>
      <InputEndpoint name=»HttpIn» protocol=»http» port=»80″ />
      <InputEndpoint name=»HttpsIn» protocol=»https» port=»443″ certificate=»Certificate» />
    </InputEndpoints>
    <ConfigurationSettings>
      <Setting name=»DiagnosticsConnectionString» />
    </ConfigurationSettings>
    <Certificates>
      <Certificate name=»Certificate» storeLocation=»LocalMachine» storeName=»My» />
    </Certificates>
  </WebRole>
</ServiceDefinition>

Como podemos ver, la información en este archivo es mínima para poder modificar la firma dependiendo del entorno en el que estemos :) .


¡Saludos!

Cloud Status: Aplicación para iPhone que nos muestra el status de la nube

Navegando por el App Store me he topado con una aplicación bastante interesante para aquellos que tengamos aplicaciones subidas a la nube o para aquellos que utilicen Google Apps. Se trata de una aplicación gratuita llamada Cloud Status y nos nuestra en qué estado se encuentra el servicio seleccionado (Amazon web services, Goggle App Engine, Google Apps, Windows Azure).

En el caso de las aplicaciones de Google, aparecen con un símbolo de prohibición pero en realidad indican que no tienen ninguna incidencia en el momento en el que se recuperó el status.

Espero que os sea de utilidad 🙂

¡Saludos!

Almacenamiento local en los roles de Windows Azure

En determinadas ocasiones es posible que necesitemos hacer uso del almacenamiento local del servidor donde estamos ejecutando nuestra aplicación. Si bien el uso del mismo debería ser de forma temporal puede ser útil en determinadas ocasiones.

En Windows Azure, dependiendo del tamaño de nuestra máquina virtual, tendríamos la siguiente capacidad:

Tamaño de la VM Espacio en el disco local
*Extra small   20 GB
Small 250 GB
Medium 500 GB
Large 1.000 GB
Extra Large 2.000 GB

 *Este tamaño fue anunciado en el PDC 2010, aunque aún no está disponible para su uso. Al entrar en vigor dicho tamaño el resto de las máquinas virtuales se verán ligeramente modificadas.

Lo primero que debemos tener en cuenta es que este espacio está solamente disponible para la instancia del rol. Es decir, si nosotros tenemos varias instancias de un mismo rol (varios frontales) cada uno tendría su propio almacenamiento local y  no sería accesible por el resto de las instancias. Otro punto a tener en cuenta es que si esa instancia, por cualquier motivo, deja de funcionar de forma inesperada se perderían los datos almacenados en este espacio.

Entonces, si este espacio es volátil y por lo tanto no se trata de un sitio fiable para mantener información en él ¿Qué uso podríamos dar a dicho espacio?
Cuando necesitamos almacenar información en un medio fiable en la nube podríamos hacerlo usando Blobs, Tablas o bien SQL Azure, ya que sería la forma más común de compartir esa información con todas las instancias de nuestros roles. Aunque estos mecanismos serían los adecuados, las transacciones a estos supone un problema de latencia. Por ello, si utilizamos el almacenamiento local para almacenar aquellos elementos que son frecuentemente accedidos podríamos aumentar la velocidad a los datos, ya que el almacenamiento local está en nuestra propia instancia.

Configurando el almacenamiento local

Para poder configurar el almacenamiento local en un rol, haremos doble click en el rol indicado en la carpeta Roles de nuestro proyecto en Visual Studio, para poder visualizar la interfaz de configuración.

Como podemos ver en la imagen anterior, podemos crear varios registros para el almacenamiento local, lo cual significa que podemos crear varios espacios destinados a distintos fines con una cuota establecida por nosotros en megas. Además, vemos que tenemos una última opción llamada Clean on Role Recycle la cual se utiliza para indicar si queremos mantener o no los datos cuando un rol es reciclado (o lo que es lo mismo, cuando un rol es reiniciado).

Esta misma información también puede ser definida a través del archivo ServiceDefinition.csdef donde se añade un nuevo apartado llamado LocalResources.

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="LocalStorage" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRoleLocalStorage">
    <InputEndpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
    </InputEndpoints>
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
    </ConfigurationSettings>
    <LocalResources>
      <LocalStorage name="Images" cleanOnRoleRecycle="false" sizeInMB="100" />
      <LocalStorage name="Videos" cleanOnRoleRecycle="true" sizeInMB="500" />
    </LocalResources>
  </WebRole>
</ServiceDefinition>
Usando el almacenamiento local

Para mostrar las distintas opciones, he creado un pequeño rol donde lo único que hacemos es recuperar un archivo a través de un control del tipo FileUpload y simulamos la subida a la instancia que está atendiendo nuestra petición.

Para poder comprobar ambos casos (qué ocurre cuando se reinicia un role con cleanOnRoleRecycle), he creado además un combo donde podemos elegir a qué espacio queremos enviar el archivo. Para recuperar la ruta del espacio destinado a nuestro recurso podríamos hacerlo a través del siguiente código:



using System;
using System.IO;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace WebRoleLocalStorage
{
    public partial class _Default : System.Web.UI.Page
    {

        protected void btnUpload_Click(object sender, EventArgs e)
        {
            var localResource = RoleEnvironment.GetLocalResource(ddlResource.SelectedValue);
            var newFile = File.Create(localResource.RootPath + FileUploadFile.FileName);

            FileUploadFile.FileContent.CopyTo(newFile);

            newFile.Flush(true);
        }
    }
}

RoleEnviroment es una clase que pertenece a la librería Microsoft.WindowsAzure.ServiceRuntime y GetLocalResource es el método que nos permite recuperar información relativa al recurso seleccionado. Al hacer la llamada nos devolverá un objeto del tipo LocalResource el cual nos aportará información como el nombre, el tamaño máximo del recurso en megas y el path del recurso.

Supongamos que subimos dos archivos, uno al recurso Images y otro a Videos. Para poder visualizar en el entorno de desarrollo estos recursos podemos acceder a través del GUI del Development Fabric y, seleccionamos la opción Open local store… de una de las instancias.

Al pulsar sobre esta opción se nos abrirá una nueva ventana con una serie de carpetas. Para acceder al apartado que nos interesa, pulsamos sobre la llamada directory.

¡Y voilà!

Vemos dos carpetas con el nombre de nuestros recursos y una imagen en cada una correspondientes a las que acabamos de subir 😀

Por último, para comprar qué ocurriría si reiniciamos dicha instancia podemos hacerlo a través de la interfaz del Development Fabric posicionando el ratón sobre el rol y pulsando en la tecla de reinicio.

Si volvemos a comprobar las carpetas de los recursos, vemos que el recurso Videos estaría vacío al haber indicado clearOnRoleRecyle 🙂

¡Saludos!

Jump list & Internet Explorer 9

Revisando las novedades por parte de Microsoft en el PDC 2010 hubo un apartado donde hablaban de las mejoras introducidas en la nueva versión de Internet Explorer (aún disponible sólo en fase beta). Una de las características que me llamó la atención fue la posibilidad de integrar Internet Explorer 9 con la barra de tareas y el menú de inicio de Windows 7. Con la nueva versión del explorador, existe la posibilidad de anclar una página web tanto a la barra de tareas como al menú de inicio de nuestro sistema operativo simplemente arrastrando el tab de la página web hasta la barra de tareas

o bien si pulsamos ALT sobre la ventada del explorador y seleccionamos Herramientas + Agregar sitio al menú de inicio podemos crear un enlace directo al sitio web.

Pero lo curioso no es para nada la posibilidad de poder enlazar nuestros sitios preferidos a estos apartados sino la funcionalidad extra que podemos ofrecer con ello. Para verlo directamente con dos claros ejemplos de la funcionalidad que os hablo voy a mostrar qué ocurriría con las páginas de Facebook y Twitter al ser ancladas:

Como podemos ver, en ambas páginas nos ofrecen un conjunto de funcionalidades adicional acorde al sitio, la cual es posible customizar 😀 Para ello tenemos dos formas de hacerlo.

Etiquetas meta en la cabecera de nuestra web

La forma más sencilla de añadir estas tareas a nuestro sitio web sería utilizando las siguientes etiquetas meta dentro del apartado head de nuestro HTML:

<!-- Jumplist --> 
  
    <meta name="application-name" content="Return(GiS); - Blog about technologies" />
    <meta name="msapplication-tooltip" content="Return(GiS);" />
    <meta name="msapplication-starturl" content="./" />
    <meta name="msapplication-task" content="name=My Blog;action-uri=http://www.returngis.net;icon-uri=/favicon.ico" />
    <meta name="msapplication-task" content="name=GiS on Linkedin;action-uri=http://www.linkedin.com/in/giselatorresbuitrago;icon-uri=http://www.linkedin.com/favicon.ico" />
    <meta name="msapplication-task" content="name=GiS on Facebook;action-uri=http://www.facebook.com/returngis#!/pages/ReturnGiS/161658947178444;icon-uri=http://www.facebook.com/favicon.ico" />
    <meta name="msapplication-task" content="name=GiS on Twitter;action-uri=http://www.twitter.com/0GiS0;icon-uri=http://www.twitter.com/favicon.ico" />
<!-- End Jumplist -->

Si nos fijamos en el código anterior, vemos que cada tarea asociada utilizará el nombre msapplication-task y contendrá los siguientes valores dentro de content:

  • name: Nombre a mostrar dentro del Jump list para ese elemento.
  • action-uri: Nos indica la url a la cual nos dirigiremos si accionamos ese elemento.
  • icon-uri: Será la dirección donde está alojado el icono asociado con la tarea.

Si ancláramos mi blog utilizando Internet Explorer 9 conseguiríamos las siguientes tareas:

Customizando el Jump list con Javascript

Por otro lado, otra opción que tenemos es hacer uso de los nuevos métodos en javascript que nos ofrece IE 9 para añadir y eliminar elementos dinámicamente, crear secciones personalizadas, etcétera.

Espero que sea de utilidad 🙂

Más información

¡Saludos!