ASPNL logo (1 kb)
Tuesday, September 07, 2010




Microsoft MVP

.NET Codewise Community
<< vorige | overzicht | volgende >>

Mobiele applicaties in .NET 2.0

Door Michiel van Otegem
12 augustus 2008

Mobiele apparaten zijn bijna niet meer uit ons straatbeeld weg te denken. Bijna iedereen heeft wel een mobiele telefoon, en er zijn ook behoorlijk wat mensen met een Personal Digital Assistant (PDA). De mogelijkheden van deze apparaten groet bijna met de dag, en de ontwikkeltools moeten daar uiteraard in mee gaan. .NET 2.0 biedt daarom een uitstekende omgeving voor ontwikkelaars van mobiele applicaties.

Er zijn grofweg drie verschillende typen mobiele platformen als het gaat om Windows. De meest bekende daarvan is de Pocket PC, de Windows variant van een PDA. Daarnaast is er de Smartphone (een mobiele telefoon met een mobiele versie van Windows), en de Tablet PC. De laatste is in feite Windows XP, maar met extra mogelijkheden voor mobiel gebruik, zoals handschrift herkenning en de mogelijkheid om via het scherm aantekeningen en tekeningen te maken met een pen. Aangezien het maken van applicaties voor een Tablet PC niet wezenlijk verschilt van applicaties voor de normale versies van Windows behandelt dit artikel alleen ontwikkeling voor Pocket PC en Smartphone. Voor deze platformen zijn er twee mogelijke manieren om applicaties te maken, te weten mobiele web applicaties en applicaties die gebruik maken van het .NET Compact Framework. Helaas is er op het vlak van de web applicaties voor mobiele apparaten niet zo gek veel veranderd ten opzichte van .NET Framework 1.x. Daarmee kun je mobiele web applicaties maken door gebruik te maken van controls die specifiek gericht zijn op mobiele apparaten, de zogenaamde ASP.NET Mobile Controls. Het nadeel van die controls is dat ze anders zijn dan de reguliere controls die men in ASP.NET gebruikt. Hierdoor moet je voor mobiele apparaten een aparte site maken, en moet je weten hoe de mobiele controls werken. Afbeelding 1 laat dit schematisch zien. Het oorspronkelijke plan voor ASP.NET 2.0 was om ervoor te zorgen dat er geen verschil meer zou zijn tussen mobiele controls en reguliere web controls. Een TextBox-control voor een browser van een desktop PC zou dan ook moeten werken op een mobiel apparaat. Het idee is dat een web control bepaalde functionaliteit verzorgt, en dat deze controls het ook doen op andere apparaten via zogenaamde Control Adapters. Dit principe werkt niet alleen voor mobiele apparaten, maar ook voor andere type apparaten, bijvoorbeeld een braille apparaat voor slecht zienden, zoals schematisch is weergegeven in Afbeelding 2. Dit is veel flexibeler dan de huidige aanpak, waarin een web control HTML 3.2 of HTML 4.0 met CSS af kan leveren, en mobiele controls alleen voor specifieke apparaten geschikt zijn. Voor nieuwe apparaten moet je wachten tot een update van Microsoft. De Adaptive Rendering in ASP.NET 2.0 biedt echter de mogelijkheid om zelf adapters te maken als er geen adapters zijn voor het apparaat dat je wilt ondersteunen. Hoewel Adaptive Rendering geďmplementeerd is in ASP.NET 2.0, zijn er nog geen Control Adapters voor mobiele apparaten. Die zullen mogelijk later apart beschikbaar gesteld worden, of anders onderdeel uitmaken van de server versie van Windows Vista. Tot die tijd zul je nog steeds moeten werken met de oude Mobile Controls.


Afbeelding 1, Mobiele web applicaties met mobile controls


Afbeelding 2, Applicaties voor verschillende platformen met control adapters

.NET Compact Framework

Het .NET Compact Framework (.NET CF) is een versie van het .NET Framework speciaal bedoeld voor (mobiele) apparaten die qua mogelijkheden beperkter zijn dan die van een desktop PC of laptop. Mobiele apparaten hebben een kleiner beeldscherm, een minder krachtige processor, minder geheugen en opslagcapaciteit. Verder kan de netwerkverbinding zeer variabel zijn. Soms kan er gebruik gemaakt worden van WiFi, soms van GPRS of UTMS, en soms is er helemaal geen verbinding. Een laatste verschil is de Windows versie voor mobiele apparaten (Windows Mobile). Windows Mobile lijkt uiteraard (zeker uiterlijk) wel op Windows op de desktop, maar zit intern behoorlijk anders in elkaar. Al deze verschillen hebben ook effect op het .NET Framework. Hoewel het de bedoeling is dat het .NET Framework en z’n compacte broertje zoveel mogelijk op elkaar lijken, zijn er meerdere beperkingen die dit niet mogelijk maken. Daar waar beide varianten dezelfde functionaliteit aanbieden werken deze voor ontwikkelaars wel precies hetzelfde, hoewel er onder de kap wel het een en ander anders werkt. Meestal hoef je daar als ontwikkelaar geen rekening mee te houden, maar soms is het toch wel belangrijk om de beperkingen te kennen. Hoe je omgaat met geheugen is daarvan een van de belangrijkste. Om je een indruk te geven van de verschillen: de normale versie van het .NET Framework (versie 1.1) neemt ruim 35 MB in op de harde schijf en kan vrijwel onbeperkt geheugen gebruiken. Het .NET CF is aanzienlijk kleiner en neemt maximaal 1,55 MB (.NET CF 1.0) in van de ROM. Daarnaast heeft het .NET CF 0,5 MB RAM nodig om uitgevoerd te worden en tussen de 5 en 100 KB voor iedere applicatie. Dit verschil is enorm, maar is ook wel logisch als je bedenkt dat toen het .NET CF in 2002 op de markt kwam mobiele apparaten veel minder geheugen hadden dan nu. Door het beperkte geheugen van een Smartphone of PDA is geheugenbeheer in het .NET CF uitermate belangrijk. Dit steekt veel nauwer dan bij het .NET Framework op een PC. Het is hierbij dus ook aan de ontwikkelaar om zo min mogelijk geheugen te gebruiken, en bijtijds objecten vrij te geven, zodat de Garbage Collector (memory manager) het geheugen vrij kan geven. De Garbage Collector in versie 2.0 van het .NET CF is aanzienlijk verbeterd, waardoor geheugenproblemen een stuk minder voorkomen dan in versie 1.0, en ontwikkelaars dus meer afgeschermd worden van dit soort afwijkingen ten opzichte van de reguliere versie van het .NET Framework. Het uiteindelijke doel van Microsoft is uiteraard om de twee varianten naar elkaar toe te laten groeien, zodat het op den duur voor ontwikkelaars niet meer uit maakt of ze nu voor de desktop of voor een mobiel apparaat ontwikkelen. Het enige waar eigenlijk rekening mee gehouden zou moeten worden is de beperkte grootte van het scherm. Dat is nog toekomstmuziek, maar met de komst van .NET Framework 2.0 en .NET CF 2.0 is het verschil wel al aanzienlijk kleiner. Zo zijn er een aantal basisvoorzieningen aan .NET CF 2.0 toegevoegd die in versie 1.0 node gemist werden, waaronder de ondersteuning voor COM Interop en ondersteuning voor cryptografie. In .NET CF 1.0 kun je alleen met (COM) DLLs van het onderliggende OS of van andere applicaties communiceren door gebruik te maken van P/Invoke. P/Invoke is ronduit naar in gebruik, omdat je daarmee expliciet de grens over gaat van Managed Code (.NET) naar Unmanaged Code (binaire DLLs), en dat opent een doos van Pandorra. Zo moet je onder andere zelf het geheugenbeheer doen van variabelen die heen en weer gaan tussen beide werelden en krijg je te maken met pointers naar geheugen locaties, in plaats van referenties die veilig zijn. Het .NET Framework kent voor deze situatie een veel eleganter methode in de vorm van COM Interop, waarbij de ontwikkelaar afgeschermd wordt van al die narigheid. COM Interop gaat via een Interop Assembly die als een wrapper dient om een COM object. Voor de ontwikkelaar lijkt het daardoor alsof het een gewoon .NET component is, omdat de Interop Assembly de P/Invoke en geheugenbeheer doet. Overigens is dit niet zonder gevaar, en het is ook hier belangrijk dat je netjes alle objecten opruimt als je er klaar mee. Dit gaat echter een stuk eenvoudiger dan wanneer je P/Invoke gebruikt.
De ondersteuning voor cryptografie is haast nog belangrijker dan de ondersteuning voor COM Interop, omdat beveiliging vandaag de dag prioriteit nummer 1 is. Een mobiel apparaat kan veel makkelijker in de verkeerde handen terecht komen, en daarom is het uitermate belangrijk dat gevoelige gegevens versleuteld zijn. Zonder de allerhande cryptografie is dat heel moeilijk te bewerkstelligen en vereist behoorlijk wat wiskundige kennis. Het .NET CF 2.0 biedt ondersteuning voor hashing, symmetric key encryption, en asymmetric key encryption. Hashing is voor handig voor het opslaan van wachtwoorden, omdat de gegevens niet terug te halen zijn. Je kunt alleen een hash van een waarde maken en de resulterende hash vergelijken met de opgeslagen hash. By symmetric key encryption wordt dezelfde sleutel gebruikt voor het versleutelen en terug halen van de gegevens, terwijl bij assymetric key encryption een sleutel is voor het versleutelen en een voor het terug halen. Dit noemt men daarom wel public key encryption, omdat de sleutel waarmee versleuteld wordt aan derden gegeven kan worden om gegevens versleuteld aan jou op te sturen. Die kan alleen jij met behulp van de andere sleutel lezen.

Ontwikkel tools

Een van de doelstelling van .NET in het algemeen is om ontwikkeling van applicaties eenvoudiger en sneller te maken. Dat gebeurt door allerlei libraries te verzorgen met functionaliteit, zoals de hierboven beschreven cryptografie functies, maar ook door de hele ontwikkel “ervaring” eenvoudig te maken middels drag-and-drop en wizards. Voor mobiele applicaties is dit niet anders, en Visual Studio 2005 is een formidabele ontwikkelomgeving voor mobiele applicaties. Het biedt een ingebouwde emulator van de Pocket PC 2003 waarmee getest kan worden, zoals te zien in Afbeelding 3. Uiteraard kun je er ook voor kiezen om je applicatie naar een echte Pocket PC of Smartphone uit te rollen en te testen, maar de emulator is wel zo handig.


Afbeelding 3, Applicatie op Pocket PC emulator

In Afbeelding 3 zie je een DataGrid (tabelweergave) met gegevens. Deze gegevens komen uit een SQL Server database op een andere machine (de ontwikkelmachine in dit geval) waarmee verbonden wordt via de netwerk kaart. Normaal gezien zou dit bijvoorbeeld via een WiFi verbinding gaan. De applicatie bevat twee DataGrids op afzonderlijke tabs, die twee verschillende tabellen laden uit de database. Dit is zo eenvoudig dat ik voor de hele applicatie slechts zes regels code heb hoeven schrijven, namelijk drie voor elke tabel. Al het overige ontwikkelwerk bestaat uit het slepen van elementen. De data structuur met de tabellen, en de bijbehorende code om de tabellen te laden is te maken door de tabellen direct vanuit de Server Explorer van Visual Studio 2005 te slepen op een DataSet definitie, zoals te zien in Afbeelding 4. Dit is precies zo als voor andere typen Windows applicaties, zodat de overstap erg eenvoudig is. Omdat alle code om de tabellen te kunnen laden meteen aangemaakt wordt in de DataSet designer, zoals je kunt zien aan de Fill en GetData functies op de beide tabellen, is het vervolgens een koud kunstje om de gegevens daadwerkelijk te laden. De koppeling tussen de DataGrids en de gegevens is eenvoudig in te stellen met behulp van wizards, en maakt gebruik van de nieuwe BindingSource-control.


Afbeelding 4, DataSet designer

Verder dan .NET

Buiten dat het .NET CF enorm verbeterd is, is onlangs ook Windows Mobile 5.0 richting de verschillende telefoon fabrikanten gegaan. Binnenkort zullen de eerste apparaten met Windows Mobile 5.0 op de markt komen. In Windows Mobile 5.0 is onder andere veel aandacht besteed aan gebruiksgemak en de gebruikers interface. Er wordt onder andere gebruik gemaakt van nieuwe lettertype technologie genaamd ClearType, waardoor kleine letters veel beter leesbaar zijn en er dus netto meer op het scherm kan. Voeg daar de standaard ondersteuning voor BlueTooth toetsenborden bij, en de Pocket PC is ineens een stuk beter bruikbaar voor het schrijven en lezen van email en documenten. Vooral mensen die veel onderweg zijn zullen hier enorm veel voordeel van hebben, omdat ze minder snel een laptop moeten pakken, en dus minder mee hoeven te zeulen.
Verder komt tegelijk met .NET CF 2.0 ook een nieuwe versie van SQL Server beschikbaar voor mobiele apparaten: SQL Server 2005 Mobile Edition. In tegenstelling tot de huidige versie zal deze niet alleen op Pocket PC werken, maar ook op Smartphones. Met SQL Server 2005 Mobile Edition is het mogelijk om gegevens te synchroniseren met de SQL Server database(s) binnen je organisatie. Hierdoor heb je altijd de (voor jou) belangrijke gegevens bij de hand, en kun je gebruik maken van database gedreven applicaties, zelfs op je mobieltje. De kracht van mobiele apparaten is kortom snel aan het toenemen. Er bestaan al mobiele telefoons met een 3 GB harde schijf, en uitgerust met de mobiele versie van Microsoft Office, SQL Server 2005 Mobile Edition, en Windows Media Player 10 biedt het vrijwel alles dat een reguliere PC ook biedt, inclusief de mogelijkheid om films af te spelen en te gamen.

Dit artikel is eerder verschenen in NetOpus, oktober 2005.

<< vorige | ^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL