image

 

Después de ya un tiempo me he decidido a llevar a cabo mi primer deploy en la nube, no obstante una de las cosas que más me preocupa es el control de lo que realmente está ocurriendo. Para conseguir ser dueño de tal poder es muy importante tener en cuenta desde el principio el tratamiento de cierta información con objeto de poder consultarla para lograr finalmente coseguir la ubicación exacta de lo que ocurre, es decir, si ocurre un problema, localizarlo y solucionarlo.

Esto tiene una implicación muy importante, y es, que finalmente, se va a pensar en las trazas y en el control de errores desde el primer momento del proyecto. ¡Al fin un “hito” que no va a poder pasarse por alto, va a resultar que poco a poco vamos a ir haciendo las cosas bien!  ¿Porque no pensamos tan detenidamente estas cosas en un sistema On-Premise? ¡Claro, en una última instancia, nos enfrentamos cara a cara con el servidor que esta en una sala más a la derecha y listo, Risa! Bueno, pues ahora nos tocará codificar algunas líneas más de código….

Por el momento veamos el deploy y todo lo que surge a su alrededor:

  • Desde Visual Studio:
    Click derecho sobre el proyecto de “Cloud Services” y “Publish…”. A continuación tendremos que seleccionar un certificado o crear uno nuevo directamnte desde el Wizard. Para crear uno basatará con incluir el siguiente comando en la cosola de “Windows Azure SDK v1.2”:
makecert -r -pe -a sha1 -n "CN=Windows Azure Authentication Certificate" -ss My -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" –sy 24 elGuerreAzure.cer.

image
Comienza el deploy, ¡ahora, lo que menos me gusta!, a esperar unos 20 minutos, aunque eso sí, podemos seguir trabajando sin ningún problema.

MyFistDeploy

Si por alguna razón (el Visual Studio “peta”) hay que volver a lanzar de nuevo el deploy. En tal caso así como cuando queremos relanzar una publicación veremos este mensaje; (“Delete and Continue” y seguimos…) y a volver a esperar.

image

  • Desde la Web “wwww.azure.com”:

Seleccionamos los paquetes de instalación; “.cspkg” y “.cscfg”:

image

image

A esperar los 20min de cortesía y listo, Risa

Un tema muy importante a tener en cuenta es realizar el deploy con el IntelliTrace activado  como mostraba en una imagen anterior.  Esto va a permitir recuperar las trazas y poder localizar cualquier error, y sobre todo, los ocurridos durante el despliegue.

Para ello, acceder al “Server Explorer” desde Visual Studio, click derecho  y “View IntelliTrace Logs”:

imageimage

En ese momento comienza la descarga de las trazas desde el servidor, seguidamente podremos acceder al IntelliTrace y localizar el posible problema.  Una detalle que me he encontrado es que las Dlls de MVC para ASP.Net no se encuentran instaladas en los Web Roles y por lo tanto hay que hacer un “Copy Local = True” de la misma para se incluya en el deploy y así se copie al/los servidor/es. Igualmente para el resto de Dlls que tampoco se encuentren instaladas. Guiño

Algunos errores durante el despliegue

  • System.Net.WebException: Unable to connecto to the remote server
  • System.ObjectDisposedException: Cannot access a disposed object.
  • “System.Net.Sockets.SocketException:  An attempt was made to access a socket in a way forbidden by its access permissions.”

Estos aprecen si el deploy en la nube se realiza con “UseDevelopmentStorage=true”,(de igual forma si “UseDevelopmentStorage=false”). La solución a estos, basatará con indicar los valores correctos tales como; “DefaultEndpointsProtocol=https;AccountName=[Your Account Name];AccountKey=[Your Account Key]. Es facil pero puede ocurrir que se nos olvide o que en algún caso la cadena no esté bien formada.

  • “No valid combination of account information found.”

Este problema puede implicar un pequeño ajuste en nuestro código, aunque no siempre tiene que ser necesario, el porqué, aún no lo tengo muy claro. En otras casos también es posible que aparezca si la cadena de conexión a la nube no está correctamente formada:

Código original:
   1: CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>

   2: {

   3: configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));

   4: });

Nuevo código a sustituir por el anterior:
   1: CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>

   2: {

   3:     string connectionString; 

   4:     if (RoleEnvironment.IsAvailable) 

   5:     { 

   6:         connectionString = RoleEnvironment.GetConfigurationSettingValue(configName);

   7:     } 

   8:     else

   9:     { 

  10:         connectionString = ConfigurationManager.AppSettings[configName]; 

  11:     } 

  12:     configSetter(connectionString);

  13: });

  • Windows Azure – Resolving “The Path is too long after being fully qualified”. 

Aparece en muchas ocasiones al intentar compilar o publicar una aplicación. Puedemos solucionarlo fácilmente siguiendo los siguientes pasos.  Más detalle aquí:

  1. Desde la consola; “Windows Azure SDK v1.2”, ejecutamos:

    1. csrun /devfabric:shutdow
    2. csrun /devfabric:clean
  2. Aseguramos que el icono de Azure no se encuentra en la barra de notificaciones.
  3. Finalmente creamos una nueva variable de entorno “_CSRUN_STATE_DIRECTORY“ y le asignamos el path que quieras “ej.: “C:\AZURE_RUN”

En un siguiente post veremos en detalle el Traceo y la monitorización, Guiño

saludos

Juanlu