Hvis du ikke har læst min første blog post om Windows Azure, burde du, inden du går videre her, lige sætte dig ind hvad Windows Azure dækker over.
Når du har fået dine adgangskoder og nøgler til netop Windows Azure, og har installeret Cloud Services templaten til Visual Studio samt Windows Azure SDK’et så kan du nu oprette et Windows Azure projekt.
Du vil ligge mærke til at der er ændret et par ting i forhold til at oprettet “normalt” projekt. Der er et par nye termer der skal afmystificeres men når det er sagt, så er det faktisk ikke så slemt.
Når man udvikler med Windows Azure er tingene delt op i forskellige “roles”. Pt. har vi 2 roles; en worker-role og en web-role.
En worker-role er en process der køre i baggrunden af enten en eller flere andre processer. Det er en slags service som hele tiden køre, og som du kan få til at holde øje med andre ting. Når du udvikler Windows Azure lokalt har du adgang til din worker-role via en form for “console” vindue, men på selve Windows Azure kan du ikke tilgå den rent visueen lt.
En web-role er i realiteten et web projekt hvori du kan gøre stort set de samme ting som i et normalt webprojekt med Visual Studio. I Windows Azure er der også undstøttelse for Full Trust, FastCGI og native kode, så du behøver ikke at udvikle ASP.NET men kan også bruge f.eks PHP. (nedenstående er et “Web and Worker Cloud Service” projekt”.)

Lad os starte med at åbne code behind filen til Default.aspx. Den ligger i vores web-role. Lav en Response.Write(DateTime.Now); og debug din løsning. Nu vil du se, at ligsom der plejer, åbnes et browser vindue og ud kommer vores dato. Det er der ikke meget nyt i.
Development Fabric
Når man har installeret Windows Azure SDK’et kommer der bla. et lille program med som hedder “development fabric”. Dette lille program er faktisk din lokale instans af Windows Azure – jeps – intet mindre!
Prøv at lav en “Set as StartUp Project” på det øverste af projekterne (MyFirstApp på billedet). Genstart Visual Studio som Administrator (hvis du ikke allerede er det) og kør en debug på løsningen.
Hvis din development fabric ikke starter så se efter om den ligger i din system tray til højre for din task bar.

Som du kan se i developer fabric er der både en WebRole og en WorkerRole, og når du debugger din løsning lokalt vil din applikations forskellige roles være at finde her.
Hvis vi kigger på vores WorkerRole i developerment fabric’en, og samtidig prøver at åbne vores WorkerRole.cs fil fra vores WorkerRole projekt, kan vi se at der bliver skrevet til en log.
public class WorkerRole : RoleEntryPoint
{
public override void Start()
{
// This is a sample worker implementation. Replace with your logic.
RoleManager.WriteToLog("Information", "Worker Process entry point called");
while (true)
{
Thread.Sleep(10000);
RoleManager.WriteToLog("Information", "Working");
}
}
public override RoleStatus GetHealthStatus()
{
// This is a sample worker implementation. Replace with your logic.
return RoleStatus.Healthy;
}
}
Du kan se hvordan WorkerRolen’s log bliver udskrevet under development fabric’en. Du skal forstå dette som, at din WorkerRole hele tiden køre og, at den i modsætning til din WebRole aldrig har noget med brugerens interaktion at gøre.

Kør PHP og ASP igennem Windows Azure.
Med FastCGI kan du køre PHP på Windows Azure, og ærlig talt så er det ikke ret meget det kræver at sætte ens WebRole op til at kunne klare den opgave.
1. Installer PHP på din maskine (følg disse steps: http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/).
2. Tilføj en web.roleConfig (xml fil) fil til dit WebRole projekt.
3. Tilføj dette kode til din web.roleConfig fil:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
<fastCgi>
<application fullPath="%RoleRoot%\php\php-cgi.exe"/>
</fastCgi>
</system.webServer>
</configuration>
4. Åben ServiceDefinition.csdef i dit Cloud Service projekt og tilføj følgende kode:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyFirstApp"
xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole" enableNativeCodeExecution="true">
<InputEndpoints>
<!-- Must use port 80 for http and port 443 for https when running in the cloud -->
<InputEndpoint name="HttpIn" protocol="http" port="80" />
</InputEndpoints>
</WebRole>
<WorkerRole name="WorkerRole">
</WorkerRole>
</ServiceDefinition>
5. Åben en “Administrator” command prompt fra roden af dit WebRole projekt og lav en xcopy af PHP ud til din webrole:
xcopy /s \php php (tryk D når den spørger)
6. Tilføj en handler til PHP filer i din WebRole web.config fil:
<add name="PHPCgiModule" path="*.php" verb="*" modules="FastCgiModule"
scriptProcessor="%RoleRoot%\php\php-cgi.exe" resourceType="Unspecified" />
7. Tilføj en php fil med følgende kode: <?php phpinfo();?> ,til din WebRole og debug din løsning!

Vil du køre ASP tilføjer du bare en fil til din WebRole, det er allerede konfigureret til at virke :).
Er det bare hosting ?
Ovenstående eksempler er sådan set bare hosting. Dog uden at have adgang til serveren på nogen måde – heller ikke med FTP. Og nej, vi har jo ikke engang set på hvordan vi rent faktisk kan ligge det op i Windows Azure endnu. Det kommer vi naturligvis til.
Dog er der et par ting hvor Azure skiller sig ud for at være en ordinær og ret kedelig hosting løsning. En af tingene har vi allerede været en lille smule indover, nemlig den her WorkerRole. Vi kommer til at se mere til vores WorkerRole i nogle af de næste blogposts.
En ting som vi slet ikke har kigget på er vores konfigurationsfil der ligger i selve Cloud Service projektet. Filen hedder ServiceConfiguration.cscfg og åbner du den kan du se, at der pr. default er skrevet noget om “Instances”. Som jeg nævne i den forrige post er der bygget skalering direkte ind i Windows Azure, og det er netop lige her man bla. kan konfigurer dette. Hvor mange instanser ønsker du at køre af henholdsvis din WorkerRole og din WebRole. Instanser = kørende kopier af samme software.
Du kan teste det lokalt med det samme. Prøv at ændre Count til 10 på din WorkerRole’s konfiguration og debug; <Instances count="10"/>. Hvis du åbner din development fabric nu kan du se 10 instanser af din WorkerRole og det må være tegn nok til at det virker efter hensigten. Rent teknisk ligger der en loadbalancer foran din løsning nu, og den finder selv ud af hvor det enkelte request skal peges hen.
At kunne skalre sin løsning ved kun at ændre en konfiguration, og i fremtiden automatisk, åbner helt nye døre for både udvikleren og forretningen. Kan du skalere din løsning til 1.000.000 hits om dagen på så kort tid lige nu ? Uanset hvad du svare, så tror jeg næppe du har et lignende fleksibelt miljø som dette.
Opsamling
I denne blogpost har vi set lidt på hvad WebRole og WorkerRole begreberne betyder og hvordan de virker lokalt. Vi så på hvad Windows Azure development fabric er for noget, og hvordan man i sammenspil med den, kan se hvad ens WorkerRole laver. Til sidst har set hvordan vi kunne få afviklet PHP via FastCGI og hvordan man kan skalere sin løsning ved hjælp af ganske enkel XML konfiguration.