Brug af OData fra Windows Phone 7

Mine første erfaringer med Windows Phone 7-udvikling var en blandet taske. En af de ting, som jeg syntes var en stor nedlukning, var begrænsningerne for API'er og biblioteker, der var tilgængelige for udvikleren. Når det er sagt, kan jeg godt lide Windows Phone 7-udvikling, fordi det giver mig mulighed for at bruge mine eksisterende .NET- og C # -færdigheder, og holde mig inden for Visual Studio 2010-miljøet, der har været meget behageligt for mig gennem årene. Så på trods af min oprindeligt dårlige erfaring med at komme i gang med Windows Phone 7, var jeg villig til at tage et par flere stikk på det.

En af de apps, jeg ønskede at lave, var en simpel applikation til at vise de lokale kriminalitetsrater. Regeringen har disse data på Data.gov, men de var kun tilgængelig som et dataekstrakt, og jeg har virkelig ikke lyst til at opbygge en webtjeneste omkring et datasæt, så jeg skrinopstillede ideen. Men så opdagede jeg, at "Dallas" -projektet endelig var blevet pakket ind, og Azure Marketplace DataMarket var live. Desværre er der kun et lille antal datasæt tilgængelige på det lige nu, men et af dem var tilfældigvis det datasæt, jeg ønskede, og det var tilgængeligt gratis. Tal om held og lykke! Jeg lavede hurtigt et nyt Windows Phone 7-program og prøvede at tilføje referencen, kun for at blive stoppet i mine spor med denne fejl: "Denne tjeneste kan ikke forbruges af det aktuelle projekt. Kontroller, om projektets målramme understøtter denne servicetype ."

Det viser sig, at Windows Phone 7 blev lanceret uden mulighed for at få adgang til WCF Data Services. Jeg er ikke sikker på, hvem der har taget denne beslutning, da Windows Phone 7 er et godt match til Azure Marketplace DataMarket, det er temmelig afhængigt af webservices for at gøre noget nyttigt, og Microsoft prøver at skubbe WCF Data Services. Min oprindelige undersøgelse fandt kun en CTP fra marts 2010 til at give disse oplysninger. Jeg spurgte rundt og fandt ud af, at koden til at gøre netop dette blev annonceret på PDC for nylig og var tilgængelig gratis på CodePlex.

Noget at huske er, at Windows Phone 7-applikationer skal være lydhøre, når de udfører behandling og skal understøtte annullering af "langvarige" processer. Efter min erfaring med ansøgningscertificeringsprocessen havde jeg en app afvist for ikke at støtte annullering, selvom det ville tage højst tre sekunder at behandle. Så nu er jeg meget forsigtig med at sikre mig, at mine applikationer understøtter annullering.

Brug af OData-biblioteket i Open Data Protocol er et øjeblik. Her er, hvad jeg gjorde for at kunne bruge en OData-tjeneste fra min Windows Phone 7-applikation:

  1. Download filen ODataClient_BinariesAndCodeGenToolForWinPhone.zip.
  2. Pak det ud.
  3. I Windows Stifinder skal du gå til siden Egenskaber for hver af DLL'er og klikke på knappen Fjern blokering.
  4. I min Windows Phone 7-applikation i Visual Studio 2010 skal du tilføje en henvisning til filen System.Data.Services.Client.dll, som jeg har pakket ud.
  5. Åbn en kommandoprompt, og naviger til kataloget med de udpakkede filer.
  6. Kør kommandoen: DavaSvcUtil.exe / uri: UrlToService / out: PathToCSharpFile (i mit tilfælde brugte jeg https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes til URL og . \ DataGovCrime .cs til min outputfil). Dette skaber en stærkt indtastet proxy-klasse til datatjenesten.
  7. Jeg kopierede denne fil til min Visual Studio-løsnings bibliotek og føjede den derefter til løsningen.
  8. Jeg oprettede min kode omkring annullering og eksekvering. Fordi jeg ikke gør noget frygteligt kompliceret, og fordi OData-komponenten allerede understøtter asynkron behandling, tog jeg en bagdørshack-tilgang til dette for at gøre det lettere. Jeg har bare booleanere, der angiver en tilstand "Kører" og "Annulleret". Hvis begivenhedshåndtereren for færdiggørelsen af ​​serviceanmodningen ser, at anmodningen er annulleret, gør den ikke noget.

Der var et stort problem: OData Client Library understøtter ikke godkendelse, i det mindste ikke på et let tilgængeligt niveau. Heldigvis er der flere løsninger.

  • Den første mulighed er, hvad der blev anbefalet på PDC: konstruer URL'en til at forespørge data manuelt, og brug WebClient-objektet til at downloade XML-dataene og derefter analysere dem manuelt (ved hjælp af f.eks. LINQ til XML). Dette giver dig ultimativ kontrol og giver dig mulighed for at udføre enhver form for godkendelse, du måtte ønske. Imidlertid opgiver du ting som stærkt indtastede proxy-klasser, medmindre du har lyst til at skrive koden til det selv (have det sjovt).
  • Det andet alternativ, foreslået af bruger sumantbhardvaj i diskussionen for OData Client Library, er at koble sig ind i SendingRequest-begivenheden og tilføje godkendelsen. Du kan finde hans prøvekode på CodePlex-webstedet. Jeg har personligt ikke prøvet dette, så jeg kan ikke garantere resultatet, men det virker som en meget rimelig tilgang til mig.
  • Et andet alternativ, der er blevet foreslået for mig, er at bruge hængekøje-biblioteket i stedet.

For enkle datasæt er WebClient-metoden sandsynligvis den nemmeste måde at få det til hurtigt og uden at skulle lære noget nyt.

Selvom det er uheldig, at out-the-box-oplevelsen med at arbejde med OData ikke er, hvad den skal være, er der nok muligheder derude, som du ikke behøver at være tilbage i kulden.

Mere om Windows Phone 7 på TechRepublic

  • Mit første Windows Phone 7 app-udviklingsprojekt
  • Windows Phone 7 App Hub-oplevelse
  • Optimer datatilgang for mobiltelefonapps
  • Windows Phone 7 gennem en udviklers øjne
  • Samsung Focus, et Windows Phone 7-kraftcenter
  • TechRepublic's Windows Phone 7-fokusside

J.Ja

Videregivelse af Justin's brancheforhold: Justin James har en kontrakt med Spiceworks om at skrive guider til produktkøb; han har en kontrakt med OpenAmplify, som ejes af Hapax, om at skrive en række blogs, tutorials og artikler; og han har en kontrakt med OutSystems om at skrive artikler, prøvekode osv.

© Copyright 2020 | mobilegn.com