Windows 8 Preview & Azure Emulator Problems. Hosted Web Core(HWC) es una solución !

Windows Azure BigA partir de la versión 1.3 del SDK de  Windows Azure, el hosting de los Web Roles se hace sobre una cuenta con permisos limitados, y si a esto le sumas que “Windows 8 Comsumer Preview” es bastante más restrictivo con ellos, es posible que te encuentres con esta problemática.

Si has instalado Visual Studio 11, este, no soportada la integración con proyectos de tipo “Windows Azure Project”, así que por el momento, Visual Studio 2010 sigue siendo necesario para este tipo de desarrollos.

 

Reproducción del error:

Antes de nada será necesario lanzar el Visual Studio como Administrador (Run as Administrator) para que el emulador pueda funcionar. ¡Curioso, pero al menos, por ahora es necesario!

image

Error: “There was an error attaching the debugger to the IIS worker process for ULR ‘http://127.255.0.0:82/’ for role instance ‘deployment16(70).<application_name>_IN_0’. Unable to start debugging on the web server. The underlying connection wass closed: An unexpected error occurred on a receive”.

image

Si accedemos a la url http://127.0.0.82 o ejecutamos con “Ctrl + F5”:

HTTP Error 500.19 – Internal Server Error

image

 

El detalle del error en el “Event View” es este:

An unhandled win32 exception occurred in w3wp.exe [2624]. Just-In-Time debugging this exception failed with the following error: The operation attempted is not supported. Check the documentation index for ‘Just-in-time debugging, errors’ for more information.

Adicionalmente, también se producen errores en el AppPool (generado dinámicamente):

Application pool ’03c09aa3-4317-4b51-bb1e-818250488df5′ is being automatically disabled due to a series of failures in the process(es) serving that application pool.

y un warning:

A process serving application pool ’03c09aa3-4317-4b51-bb1e-818250488df5′ suffered a fatal communication error with the Windows Process Activation Service. The process id was ‘2624’. The data field contains the error number.

Solución:

Después de muchas vueltas, la solución es cambar la identidad del pool de “Networkservices” a “LocalSystem”.  El inconveniente de esta solución es que cada vez se ejecute el emulador tendremos que realizar esta modificación, lo que no resulta ”nada” productivo.

  • Una de las soluciones pasa por seguir los pasos que comenta Wade Wegner en este post, donde se incluye código en el “OnStart()” de cada Role, a fin de otorgar permisos al pool. Esta acción es propia para un entorno de producción, pero no para el emulador, donde, de hecho, no funciona.
  • Así que la solución, finalmente se reduce a, comentar las Sección “<Sites>” del fichero de configuración  “ServiceDefinition.csdef” . En cuyo caso, no se hace uso de IIS, sino del “Hosted Web Core” (HWC) donde el proceso pasa a ser “WaIISHost.exe” en lugar del “w3wp.exe”. 
   1: <?xml version="1.0" encoding="utf-8"?>

   2: <ServiceDefinition name="WindowsAzureProject1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">

   3:   <WebRole name="WebRole1" vmsize="Small">

   4:     <!--<Sites>

   5:       <Site name="Web">

   6:         <Bindings>

   7:           <Binding name="Endpoint1" endpointName="Endpoint1" />

   8:         </Bindings>

   9:       </Site>

  10:     </Sites>-->

  11:     <Endpoints>

  12:       <InputEndpoint name="Endpoint1" protocol="http" port="80" />

  13:     </Endpoints>

  14:     <Imports>

  15:     </Imports>

  16:   </WebRole>

  17: </ServiceDefinition>

Si ya conoces Full IIS, te habrás dado cuenta, que  estas capacidades no son soportadas por la solución aceptada, no obstante, espero haber evitado algún dolor de cabeza y conseguir continuación con una feliz depuración en el Emulador de Windows Azure.

 

Otras referencias:

 

Saludos @home

Juanlu, elGuerre