Windows Azure Store

Voor het Windows Azure platform hadden we al de beschikking over Windows Azure Marketplace. Deze marketplace is combinatie van Data en Applicaties.

WindowsAzureMarketplaceLogo

Maar nu is daar een nieuwe bijgekomen. Ook deze heeft de combinatie Data en Applicaties.

addon1addon2

addon3

Maar wat is dan het verschil? De Marketplace is meer winkelcentrum met verschillende SAAS producten voor of naast je Windows Azure applicaties. De ‘gekochte’ applicatie draait bij de leverancier en jij kunt er gebruik van maken. Voor de applicaties in de nieuwe Windows Azure store geldt dat ze komen te draaien onder jouw subscription. Een subtiel verschil maar toch voor sommige bedrijven een hele belangrijke.

Als je de keuze uit de vele op dit moment al beschikbare applicaties hebt gekozen, doorloop je een wizzard. Ook de Windows Azure store is qua user interface gelijk aan de overige onderdelen van de portal. Je geeft aan waar de app/add-on geinstalleerd moet worden etc.

addon4addon5

addon6

Aan het eind krijgt de administrator van de Windows Azure subscription dan een mail met de aangeschafte producten en vindt de verrekening plaatst via de gekoppelde creditcard.

addon7

addon8

Het mooie van dit alles is, dat ook dit een open geheel is. Iedere leverancier van goede tools kan opgenomen worden in de store. Dit kan je afzet markt enorm vergroten. En voor starters je hoeft je alleen druk te maken om je tools en niet over de betaling etc, dat neemt Microsoft voor zijn rekening tegen een vergoeding.

Kortom weer nieuw stukje in de complexe puzzel van Windows Azure. Naar mijn mening was het platform al behoorlijk volwassen, maar wordt het nu nog completer.

Windows Azure SQL Reporting

Het is zover ook SQL Reporting is nu geïntegreerd in de HTML 5 Windows Azure portal. Nu zijn alle functionaliteiten van de ‘oude’ Silverlight portal verhuist naar de nieuwe portal.

sqlrep1 sqlrep2

Helaas is er aan de kosten nog niet veel gewijzigd, hoewel er wel een kosten reductie is aangekondigd. Als je nu SQL reporting gebruikt voor enkele add hoc reports, dan is deze oplossing erg duur. Heb je meerdere rapporten die je hoog frequent gebruikt, dan zou het allemaal nog wel eens mee kunnen vallen. Windows Azure SQL reporting kent maar een datasource en dat zijn Windows Azure databases.

Maar zoals alles op eender welk Cloud platform je zult goed moeten nadenken of en welk middel je gaat inzetten voor je oplossing. Omdat dit nogal eens niet volledig genoeg gedaan wordt, lijken Cloud platforms veel duurder dan on-premise oplossingen.

Windows Azure Mobile Services

Sinds enige tijd zijn de Windows Azure Mobile Services beschikbaar gesteld via de Windows Azure management portal. Deze Mobile Services maken het eenvoudiger om snel mobiele applicaties te maken met Windows Azure als backend. Dat is dan niet beperkt tot Windows Phone 8 en Windows 8, maar ook iOS behoord tot de platforms. Zoals we inmiddels gewenst zijn met de Windows Azure portal en met Cloud diensten in het algemeen, de verbeteringen en aanpassingen volgen elkaar rap achter elkaar op.

wamobserv1

We konden al Mobiele applicaties maken met Windows Azure SQL Databases als backend, push notifications gebruiken en verschillende identity providers gebruiken. Nu is er een scheduler mogelijkheid toegevoegd. http://www.windowsazure.com/en-us/develop/mobile/tutorials/schedule-backend-tasks/

Maar ook is nu alles via Commandline tools te configureren en te beheren. Dat is erg geweldig, dat betekent dat we onze ALM processen nog beter ingericht kunnen krijgen. Want hoe minder handmatige acties, hoe heter het is. http://www.thejoyofcode.com/The_twelve_days_of_ZUMO.aspx

Nick Harris (@cloudnick) heeft ook nog eens allerhande voorbeelden beschikbaar gesteld. Met deze voorbeelden zijn de mogelijkheden van Windows Azure Mobile Services onbegrensd.

Geolocation sample end to end using Windows Azure Mobile Services

wamobserv2

http://code.msdn.microsoft.com/windowsapps/Geolocation-sample-end-to-5d9ee245

Enqueue and Dequeue messages with Windows Azure Mobile Services and Services Bus

wamobserv4

http://code.msdn.microsoft.com/windowsapps/Enqueue-and-Dequeue-e9429caa

Capture, Store and Email app Feedback using Windows Azure Mobile Services

wamobserv3

http://code.msdn.microsoft.com/Capture-Store-and-Email-34005240

Upload File to Windows Azure Blob Storage using Windows Azure Mobile Services

wamobserv5

http://code.msdn.microsoft.com/windowsapps/Upload-File-to-Windows-c9169190

Create a Game Leaderboard using Windows Azure Mobile Services

wamobserv6

http://code.msdn.microsoft.com/windowsapps/Adding-a-Leaderboard-to-1f9d216d

Windows Azure Websites and Storage

Windows Azure Websites zijn erg handig om snel een website in de lucht te brengen. Je kunt daarbij kiezen uit een gallery van producten. Deze gallery bestaat uit Blogs (WordPress ea), Content management systemen (DotNetNuke ea), Wiki’s etc. En als je door deze lijst heen loopt, dan zie je dat ze niet allemaal .NET based zijn. Sommige producten hebben SQL Server database nodig en sommige MySQL. Ook dat is geen probleem beide is mogelijk. Met een paar simpele klikken heb je zo een website in de lucht.

eval1

Maar als je een reeds bestaande website hebt, dan kun je die ook hosten op Windows Azure websites. Ook dan ben je met iets meer klikken up en running. Moet je in je website dan nog rekening houden met het hosten op Windows Azure? Nope, helemaal niet. Aan je website hoef je niets aan te passen en deze kan zo naar Windows Azure. En updates aan de website kun je dan gewoon deployen oftewel publishen zoals je dat ook op een ‘eigen’ webserver zou doen.

eval7

Oke, maar ik wil gebruik maken van Windows Azure storage of Windows Azure Service bus. Dat kan dan zeker niet? Jazeker wel, geen probleem. Uiteraard moet je in je applicatie dan wel iets aanpassen om volledig gebruik te maken van deze diensten.

Ik heb dat zelf gebruikt voor de server kant van mijn nieuwe Windows 8 en Windows Phone 8 applicatie. Met deze applicaties kun je de sessies van de SDN events evalueren en je waarde oordeel geven.

eval4eval5

Het gaat hier niet om enorm veel data. Ik heb events en event hebben sessies en een sessie heeft een evaluatie. Er zijn ook geen hele moeilijke relaties tussen tabellen. Dus typisch zo’n gevalletje voor Windows Azure storage tables. Ook vanuit kosten oogpunt niet onbelangrijk. Zoals gezegd, het gaan niet om veel data. Stel even 3 events maal maximaal 20 sessies maal 150 bezoekers, dat blijft heel erg ruim onder de 100 Mb van de kleinste Windows Azure SQL Database. Het prijsverschil tussen storage tables en SQL tabellen is dan best groot. (NB Ik realiseer mij dat we soms SQL server functionaliteit gewoon nodig hebben, maar ik denk ook wel dat we vaak te gauw grijpen naar dit middel.

Deze data ontsluit ik voor de applicaties via een WebApi. Zodat de apps via een simpele REST interface de get en posts kunnen doen en JSON terug krijgen. En deze REST services zijn onderdeel van mijn Windows Azure Website.

Maar kan dat dan zomaar? Jazeker. Alles wat je nodig hebt, zijn deze twee NuGet packages.

eval2

En deze code. De connectionstring naar de Windows Azure storage staat dan in de Web.config.

eval3

De rest van je code is zoals je altijd met Windows Azure storage tables omgaat.

En mijn groeipad? Windows Azure Websites kun je ook scalen (meerdere instanties) en/of zwaardere machines van maken.

eval6

Stel je voor dat er straks toch een achtergrond proces bij komt, bijvoorbeeld om BI op de ingevoerde data te doen. Dan zou ik daar een WorkerRole voor nodig kunnen hebben. Dan kan ik de Windows Azure Website zo ombouwen tot een Cloud Service. De setting van de storage zal dan verplaatsen van de web.config naar de Cloud Service configuration. Verder hoeft er in principe weinig te gebeuren aan de Web Role. Uiteraard zal ik de Worker Role dan moeten uitwerken.

Handig he, Windows Azure. Het groeit met je mee, je kunt klein beginnen en groeien naar immense hoogte.

//Build and Windows Azure

.NET SDK

Windows Azure SDK 1.8 for .NET is uit. De SDK is er voor Visual Studio 2010 en Visual Studio 2012. Je kunt hem installeren via de Microsoft Web Platform Installer. Als je in de zoekbox “Windows Azure” typt, dan vind je de nodige install spullen.

image

Visual Studio Tooling

De Server Explorer is uitgebreid, zeker waar het de Service bus betreft. De credentials zijn nu eenvoudig te laden. Ook zijn er verschillende nieuwe scenarios voor het testen van topics en queues geimplementeerd. Ook het updaten van de properties van een queue behoort nu tot de mogelijkheden. Voorheen moest je queue weggooien en opnieuw met de juiste properties aanmaken. Meer hierover later.

image image

Windows Azure Websites

Windows Azure Websites draait nu .NET 4.5. Dit was al bekend, maar nu zie je het ook op de website. Windows Azure Websites vormen daarmee een erg krachtige snelle manier om websites beschikbaar te stellen, daar waar een Cloud Service teveel overhead heeft. Alleen SSL behoort nog niet tot de mogelijkheden.

image

Cloud Services

Voor Cloud Services kunnen we nu ook gebruik maken van .NET 4.5. De server software van de instantie kan nu ook Windows Server 2012 zijn. De OS Families zijn:

  1. Windows Server 2008
  2. Windows Server 2008 R2
  3. Windows Server 2012.

image

Dat biedt mogelijkheden tot het gebruik van Async en Websockets. Maar ook specifieke voordelen van IIS 8.

Let wel een upgrade van OS Family 2 naar 3 kan niet, je zult een delete en redeploy moeten doen.

image

Portal wijzigingen

Naast een nieuwe icon als je de management portal gepinned hebt op de taskbar, is ook de header aangepast.

image

Bijvoorbeeld als je naar Silverlight portal wilt, dan moet je nu klikken op je account.

image      image

Ook is het portaal nu in meerdere talen mogelijk. Het is nog een beperkte set, maar ook dat zal wel groeien in de toekomst.

image

Esc werkt nu op verschillende plekken.

Ook zie je nu dat de portal bestaat uit delen die productie zijn en delen die preview zijn. Om dit onderscheid goed aan te geven staat er nu een groene tekst onder de menu items als het een preview onderdeel is.

image

Op de Silverlight portal kun je bij het updaten of deployen van een Cloud Service ook gebruik maken van Windows Azure Storage. In plaats dat de deploy de upload van de package naar Storage voor zijn rekening neemt, kun je ook zelf uploaden naar Storage en van daar een deploy uitvoeren. Dat kan nu ook op de Preview HTML portal.

image

Store

Echt nieuw op de portal zijn Add-on en Store. De Store is interessant voor ISV of leveranciers van handige tools. Op dit moment is de Store alleen beschikbaar in de US. Het idee van de store is, dat je daar tools/apps kunt kopen die je in je eigen subscription installeert en gebruikt. De aangeschafte zaken komen dan te staan bij Add-on. Je ben hierbij dus niet afhankelijk van de derde partij, zoals dat wel het geval is bij de Windows Azure Market. De hele verkoop afhandelijk zal dan door Microsoft geregeld worden.

imageimage

image

Dit biedt wel weer hele mooie kansen voor diverse leveranciers en ontwikkelaars om ook hier handige tooltjes en functionaliteiten aan te bieden bij de bron. De hele afhandeling op de Windows Azure portal is een hele API, waar je op kunt aansluiten.

Ik kan geen details laten zien van deze store, maar het principe werkt zoals je ook een Windows Azure website uitkiest of een Virtual Machine. Je kunt kiezen uit een lijst met verschillende tools. Je kunt dan voor een betaalplan kiezen en uiteindelijk betalen. Daarna zal het tool geserviced worden.

Mobile Services

Mobile services was al een tijdje als preview beschikbaar, maar ook deze heeft een uitbreiding gekregen. Naast het Windows 8 platform zijn nu ook Windows Phone 8 en IOS toegevoegd.

image

TFS in the Cloud

TFS was er al een poosje in Preview, maar nu is het dan toch eindelijk productioneel. Dat wil overigens niet zeggen dat het af is! Iedere 3 weken worden oplossingen voor bugs en nieuwe functionaliteiten gedeployed. Dat is gaaf! Ook gaaf zijn de Build service in de Cloud! Je kunt nu zelf builds starten in de TFS in the Cloud.

tfs

Voorlopig is TFS in the Cloud nog gratis en voor teams van 5 personen. Als je het nog niet geprobeerd had, dan is het nu je kans. Ga naar http://tfs.visualstudio.com

Hadoop on Azure

Hadoop on Azure (http://www.hadooponazure.com) heet nu Windows Azure HDInsight. Via de Web platform installer is er ook een locale versie te installeren. Daarnaast zijn er ook weer allerlei mogelijkheden toegevoegd en zijn er verschillende aanpassingen gedaan.

Samengevat

image

VM name customization

Als je een Role (Web, Worker of VM) maakt op Windows Azure, dan krijgt de bijbehorende machine altijd een gegenereerde Computername. Deze computer begint dan altijd met RD gevolgd door een nummer. RD staat voor Red Dog, wat de codename was voor Windows Azure.

vmname02

Maar de computer naam kun je beïnvloeden. In het Service Configuration cscfg bestand kun je bij de role naast name ook een vmName opgeven. Deze opgegeven naam vormt dan de Computername van de server op Windows Azure. Deze naam wordt dan gesuffixed met een volgnummer.

Zie hieronder. Ik heb een app met 2 roles, een WebRole en een WorkerRole. De WebRole wil ik graag MMWEB noemen en de WorkerRole wil ik graag MMWORK noemen.

vmname01

Als je dan RDPt naar de Role dan zie je in de properties deze namen terug komen.

vmname03

vmname04

Windows Azure Portal Updates

Het is zoals het hoort in de Cloud omgeving. Met regelmatige updates komen er features en updates naar de Windows Azure portal. Sinds vandaag zijn er ook weer updates bij gekomen op de Windows Azure portal. Hier een kleine opsomming.

Updates

1) Met de Windows Azure portal kun je de settings uit de ServiceConfiguration.cscfg file op de portal aanpassen. In het begin waren deze veldjes net iets te klein en dat is nu aangepast.

7-10-2012 18-45-49

2) Op de Storage pagina’s kon je niet zoveel. Natuurlijk heb je verschillende tools van third party leveranciers, maar het aanmaken van een container zou perfect vanaf de portal kunnen. Met deze refresh is dat ook toegevoegd. Dat scheelt weer een switch naar een andere omgeving. Nog mooier, kun je het ook vanaf je mobile phone aanpassen/toevoegen.

7-10-2012 17-56-52

Ook het simpel deleten van een blob is nu mogelijk vanaf de portal

7-10-2012 17-58-57

Hopenlijk komen er ook nog mogelijkheden om Windows Azure tables en Windows Azure queues een beetje te beheren vanaf de portal.

3) Er was al een menu item voor het beheren van de settings. Deze is nu uitgebreid met het aanmaken van Co-administrators. Tot op heden moesten we daarvoor nog naar de Silverlight versie van het portaal, nu is dat niet meer nodig.

7-10-2012 18-08-20

Ik verwacht hier ook nog een optie om je subscriptions te beheren tot op zekere hoogte.

Toevoegingen

1) Service bus

Het beheren van de Servicebus is naar de nieuwe portal gekomen! Dit is een geweldige toevoeging.

7-10-2012 17-57-15

Niet alleen kun je een Service bus subscription maken, maar ook Queues / Topics en Relays kunnen beheerd worden op de portal. Dat is erg mooi.

7-10-2012 17-58-03

2) Import / Export Databases

Via de Silverlight portal kon je je Windows Azure SQL Databases ook exporteren naar je storage en importeren vanaf je storage. Dat is nu ook mogelijk van de HTML portal.

7-10-2012 18-12-34

7-10-2012 18-04-19

Erg tof deze toevoegingen en wijzigingen. Het gebruik van de Silverlight portal wordt op deze manier steeds minder en zal spoedig verdwijnen.

Geweldig gedaan Windows Azure product team!

Using 32 bit (Legacy) DLL on Windows Azure

Op Windows Azure is (bijna) alles mogelijk. Zo ben je niet beperkt tot alleen applicaties op basis van .NET. Maar ook Java, PHP, NodeJS en nog veel meer talen en taaltjes zijn heel goed bruikbaar op het Windows Azure platform, Windows Azure Websites en Windows Azure Virtual Machine.

Windows Azure is in de basis een 64 bits Windows 2008 server park. Maar ook dan ben je niet beperkt tot het gebruik van alleen 64 bits programma’s of dll’s. Dit is erg prettig, want zo hoef je ‘legacy’ software niet perse te verherbouwen. Of deze legacy nu geschreven is een Microsoft taal of anders maakt dan ook weer niet zoveel uit.

Zo hebben wij voor een klant een Windows Azure Proof of Concept uitgevoerd, waarbij we te maken hadden met een 32 bits C++ dll met een soort memory leak. Het resultaat moest wel in de Cloud kunnen draaien en dan ook nog eens netjes schaalbaar zijn.

legacydll

Hoe hebben we dat aangepakt?

Laten we eerst eens kijken naar de C++ dll. Zoals gezegd dit component heeft een soort memory leak. Vooraf nog even de dll was ooit bedoeld en gebruikt in een stand alone desktop applicaties. De dll is niet echt bedoeld om in een gedistribueerde omgeving te werken. Als het component door 2 websites gelijktijdig aangeroepen werd, dan werd het resultaat van beide berekeningen vermengd met elkaar. De dll heeft een stukje shared memory, dat niet per proces uniek is en daardoor vindt de vermenging plaats. In .NET is dit relatief simpel op te lossen. Door gebruik te maken van een Mutex.

 1: public int Calculate32Mutex()

 2: {

 3:     int result = 0;

 4:

 5:     mutex.WaitOne();

 6:     try

 7:     {

 8:         result = Calculate32(); // calls the actual 32bit dll function

 9:     }

 10:     finally

 11:     {

 12:         mutex.ReleaseMutex();

 13:     }

 14:

 15:     return result;

 16: }

Door het gebruik van de Mutex moet iedere aanroep wachten tot de vorige aanroep klaar is. Dat is vervelend als je een behoorlijke load verwacht. Maar we gaan het op Windows Azure gaan hosten. Daar kunnen we mooi schalen en op deze manier de load aan.

Blijft nog wel het 32 bits probleem. Hiervoor zijn 2 oplossingen.

  1. We kunnen de DLL hosten in een 32 bits Console applicatie.
  2. We kunnen de app pool van IIS in 32 bits mode zetten.

Laten we beide bekijken.

Oplossing 1: Het hosten van de DLL in een 32 bits Console applicatie.

We maken een Console applicatie en geven bij de Build opties aan dat het Platform target x86 is. In de main van deze Console applicatie zetten we dan deze code.

 1: static void Main(string[] args)

 2: {

 3:     Uri address = new Uri("net.pipe://localhost/CalculatorService");

 4:

 5:     NetNamedPipeBinding binding = new NetNamedPipeBinding();

 6:     binding.ReceiveTimeout = TimeSpan.MaxValue;

 7:

 8:     using (ServiceHost host = new ServiceHost(typeof(CalculatorDll)))

 9:     {

 10:         var ff = host.AddServiceEndpoint(typeof(ICalcService), binding, address);

 11:         ServiceMetadataBehavior metadata = new ServiceMetadataBehavior();

 12:

 13:         host.Description.Behaviors.Add(metadata);

 14:         host.Description.Behaviors.OfType<ServiceDebugBehavior>()

 15:             .First().IncludeExceptionDetailInFaults = true;

 16:

 17:         Binding mexBinding = MetadataExchangeBindings.CreateMexNamedPipeBinding();

 18:         Uri mexAddress = new Uri("net.pipe://localhost/CalculatorService/Mex");

 19:         host.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, mexAddress);

 20:

 21:         host.Open();

 22:

 23:         Console.WriteLine("The receiver is ready");

 24:         Console.ReadLine();

 25:     }

 26: }

Met behulp van een named net pipe wordt de service beschikbaar. De methode op deze service bevat dan een call naar de functie in de 32 bits dll.

 1: [DllImport("Win32Project1.dll", SetLastError = true)]

 2: public static extern Int32 Calculate(Int32 delay);

 3:

 4: public int RekenDllExample()

 5: {

 6:     return Calculate(2000);

 7: }

Om dit geheel te kunnen schalen heb ik er voor gekozen om deze achter een ‘normale’ WCF service te hangen. Als je hem rechtstreeks in de Website wil gebruiken, dan kan dat natuurlijk ook. Maar dan wordt het schalen erg beperkt.

Op de WCF service moet dan een koppeling met deze Named Net pipe gemaakt worden. Het handigst is dat te doen in de Global.asax en wel in de Application_BeginRequest methode. Daar heb ik twee methodes: een om de DllHost te starten en een om de koppeling te maken.

 1: string dllHostPath = @"Redist\DllHostx86.exe";

 2: private const int ClientInitTimeOut = 20; // in seconds

 3:

 4: protected void Application_BeginRequest(object sender, EventArgs e)

 5: {

 6:     // Make sure that our dll host is running

 7:     EnsureDllHostRunning();

 8:

 9:     // Make sure the client is connected

 10:     EnsureCalcServiceClientConnected();

 11: }

 12:

 13: private void EnsureDllHostRunning()

 14: {

 15:     Process[] p = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(dllHostPath));

 16:     if (p.Length == 0)

 17:     {

 18:         Application["CalcServiceClient"] = null;

 19:         ProcessStartInfo psi = new ProcessStartInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, dllHostPath).ToString());

 20:         Process dllHost = Process.Start(psi);

 21:     }

 22: }

 1: private void EnsureCalcServiceClientConnected()

 2: {

 3:     CalcServiceClient client;

 4:     client = (CalcServiceClient)Application["CalcServiceClient"];

 5:     if (client == null || client.State != System.ServiceModel.CommunicationState.Opened)

 6:     {

 7:         client = GetCalcServiceClient();

 8:         Application["CalcServiceClient"] = client;

 9:     }

 10: }

 11:

 12: private CalcServiceClient GetCalcServiceClient()

 13: {

 14:     CalcServiceClient serv = null;

 15:

 16:     int retryCount = 0;

 17:     bool connected = false;

 18:     while (retryCount < ClientInitTimeOut * 10)

 19:     {

 20:         try

 21:         {

 22:             EndpointAddress address =

 23:                 new EndpointAddress("net.pipe://localhost/CalculatorService");

 24:             NetNamedPipeBinding binding = new NetNamedPipeBinding();

 25:             binding.ReceiveTimeout = TimeSpan.MaxValue;

 26:

 27:             serv = new CalcServiceClient(binding, address);

 28:             serv.Open();

 29:             if (serv.State == System.ServiceModel.CommunicationState.Opened)

 30:             {

 31:                 connected = true;

 32:                 break;

 33:             }

 34:         }

 35:         catch (Exception e)

 36:         {

 37:         }

 38:

 39:         retryCount++;

 40:         System.Threading.Thread.Sleep(100);

 41:     }

 42:

 43:     if (!connected)

 44:     {

 45:         throw new TimeoutException(

 46:             "Couldn't connect to the calculator service.");

 47:     }

 48:

 49:     return serv;

 50: }

In je project moet je dan ook een Service reference leggen naar de DllHost Console applicatie. Dit is relatief eenvoudig. Je start de Console applicatie op en kies voor Add Service Reference. Hierna zijn er in de Web.config endpoint gegevens toegevoegd. Dit endpoint is net.pipe://localhost/CalculatorService. Maak je geen zorgen over Localhost, want de DllHost applicatie en de WCF service die uiteindelijk het endpoint aanroept, draaien in dezelfde instance. Daarmee is localhost altijd waar, ook in de Cloud.

Verder moet je dan een Folder aan je solution toevoegen waarin je de DllHost console app en de 32 bits dll hebt zitten. Vergeet dan niet om de property ‘Copy to Output Directory’ dan te zetten op ‘Copy Always’ or ‘Copy if newer’.

Oplossing 2: We kunnen de app pool van IIS in 32 bits mode zetten

Deze oplossing is het minst ingrijpend. Enige lastige (ik ben geen IT pro meneer) hoe kun je dat doen vanuit een script. Ten slotte kan je alles op een Windows Azure instance zolang je het maar kunt automatiseren. Als het gescript is, dan kun je met een Startup task het script laten uitvoeren en is het helemaal geregeld.

Het commando om dit te doen is:

 1: REM make apppools 32bit

 2: %windir%\system32\inetsrv\appcmd set config

 3:     -section:applicationPools

 4:     -applicationPoolDefaults.enable32BitAppOnWin64:true

Dit commando in een startup.cmd bestand. Plaatsen in het desbetreffende project. In de ServiceDefinition.csdef definiëren we de startup task en we zijn klaar.

 1: <Startup>

 2:   <Task commandLine="startup.cmd" executionContext="elevated" taskType="simple" />

 3: </Startup>

Verder moet je dan een Folder aan je solution toevoegen waarin de 32 bits dll staat. Vergeet dan niet om de property ‘Copy to Output Directory’ dan te zetten op ‘Copy Always’ or ‘Copy if newer’.

Nadeel van de oplossingen:

Als er dynamische configuratie nodig is, dan is de Console applicatie het minst handig. Zoals gezegd het is een Console applicatie met een app.config. Default kan deze niet zomaar uit de Service configuration settings lezen. Bij de andere oplossing kan de Webservice er gewoon wel bij.

Testen

Om de twee oplossingen te testen heb ik een frontend gemaakt. Daarop staan 4 knoppen. De eerste twee knoppen roepen een WCF service aan die gebruik maakt van de Dll Host console applicatie. De laatste twee knoppen roepen een WCF service aan die gebruik maakt van AppPool in 32 bits mode. Er staan labels result, waar een 0 of een 1 of hoger in komt. Als het getal 0 is dan werd de rekenmodule aangeroepen en is er niets gemixt met een andere aanroep. Is het getal groter dan 1 dan is het resultaat gemixt met een andere aanroep. Dit kun je testen door twee browser naast elkaar open te zetten en bij gelijktijdig (er is nog tijd) drukken op de knop zal er een 0 en een 1 verschijnen. Tenzij er meerdere bloglezers op hetzelfde moment aan het testen zijn 😉

Als je dat doet met de Mutex knoppen, dan zal voor beide het resultaat 0 zijn.

http://rekenmoduletest.cloudapp.net

clip_image002

Uiteraard wil je dan weten hoe het met de load zit, daar kom ik in een volgende blogpost op terug. Want uiteraard gaan we dat ook via een Cloud service testen.

Bovenstaand verhaal gaat niet alleen op voor Windows Azure, maar feitelijk voor elke 64 bits server omgeving on premise of bij een andere hosting partij.

Referenties:

Windows Azure Portal Updates and Windows Azure Mobile Services

De preview Windows Azure management portal is sinds gisteren geupdate. Een groot aantal van de vele wensen van gebruikers is meegenomen in deze update.

Hier een vlugge opsomming:

– het is nu mogelijk om de kolommen van het grid te resizen. Handig voor bijvoorbeeld de VM’s / VD’s met hun vreselijk lange namen.

wa_aug2012_upd2

wa_aug2012_upd3

– Er is een Settings tab bijgekomen, daar kun je nu je management certificaten beheren. Je kunt ze uploaden en verwijderen.

wa_aug2012_upd4

wa_aug2012_upd5wa_aug2012_upd6

– Als je inzoomt op bijvoorbeeld een Cloud Service, dan zie je links visueel nog waar je bent of vandaan kwam.

wa_aug2012_upd7

Maar er is ook groot nieuws!

Vandaag is geintroduceerd Windows Azure Mobile Services! Een apart gedeelte waarbij je super simpel een Windows 8 applicatie kunt maken, die gebruik maakt van Windows Azure SQL Databases, Push Notification Services en/of Authentication.

Uitgebreide info uiteraard bij de ScottGu himself.

http://www.windowsazure.com/en-us/develop/mobile/

http://weblogs.asp.net/scottgu/archive/2012/08/28/announcing-windows-azure-mobile-services.aspx

wa_aug2012_upd8

Kortom leuke nieuwe dingen.