Varios servicios hospedados dentro de un mismo Hosted Service de Windows Azure – Full IIS

Hace unos cuantos d铆as, lo siento por el retraso :(, uno de mis followers me pregunt贸 si era posible tener un sitio web y un web service en una misma m谩quina virtual de Windows Azure. Lo cierto es que si 馃檪 Desde que tenemos control total sobre IIS somos capaces de crear tanto sitios, directorios virtuales como aplicaciones virtuales que cuelguen desde el IIS de la m谩quina virtual de Windows Azure Compute.
Para este post, tengo una peque帽a demo donde muestro c贸mo es posible crear directorios y aplicaciones virtuales dentro de un Web Role. La estructura ser铆a la siguiente:

Como se puede ver en la imagen anterior tenemos dos proyectos: un web role, dentro de este una carpeta llamada statichtml y un proyecto de WCF que ser谩 mi servicio web. Por otro lado, en el proyecto de Windows Azure observamos que 煤nicamente tenemos un s贸lo rol dado de alta. Para poder hacer esta “mezcla” debemos centrarnos en el archivo ServiceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WebRole_WebService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="aspnetWebRole" vmsize="Small">
    <Sites>
      <Site name="Web">
        <VirtualApplication name="myWebService" physicalDirectory="..WcfService">
        </VirtualApplication>
        <VirtualDirectory name="myStaticHtml" physicalDirectory="..aspnetWebRolestatichtml">
        </VirtualDirectory>
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
  </WebRole>
</ServiceDefinition>

Por decirlo de alguna manera, tenemos un proyecto m谩ster dentro de nuestra soluci贸n: aspnetWebRole. Dentro de la configuraci贸n del mismo, tenemos un apartado llamado Sites donde podemos a帽adir tanto sitios nuevos, como directorios virtuales y aplicaciones virtuales.
Para poder definir qu茅 es cada cosa tenemos una serie de tags organizados de forma jer谩rquica donde definimos qu茅 directorios y qu茅 aplicaciones virtuales pertenecen a qu茅 sitio.

Nota: el atributo physicalDirectory es relativo al archivo ServiceDefinition.csdef. De todos modos, si no nos queda claro c贸mo montar el path, al intentar publicar el sitio en el apartado Errors de nuestro Visual Studio 2010 nos mostrar谩 la ruta en la cual est谩 intentando buscar.

Si ejecutamos este c贸digo a trav茅s del emulador y accedemos a nuestro IIS en local, podremos observar que hemos conseguido la siguiente estructura dentro de nuestro servidor web:

Adjunto el proyecto por si fuera de utilidad 馃榾

隆Saludos!