Bruker OData fra Windows Phone 7

De første erfaringene mine med utviklingen av Windows Phone 7 var en blandet pose. Noe av det jeg syntes var et stort svikt, var begrensningene for API-er og biblioteker tilgjengelig for utvikleren. Når det er sagt, liker jeg utvikling av Windows Phone 7 fordi det lar meg bruke mine eksisterende .NET- og C # -ferdigheter, og holde meg innenfor Visual Studio 2010-miljøet som har vært veldig behagelig for meg gjennom årene. Så til tross for min opprinnelig dårlige erfaring med å komme i gang med Windows Phone 7, var jeg villig til å ta et par stikk til.

En av appene jeg ønsket å lage, var en enkel applikasjon for å vise de lokale kriminalitetsratene. Regjeringen har disse dataene på Data.gov, men de var bare tilgjengelig som datautdrag, og jeg hadde virkelig ikke lyst til å bygge en webtjeneste rundt et datasett, så jeg skrinlagt ideen. Men så oppdaget jeg at "Dallas" -prosjektet endelig hadde blitt pakket sammen, og Azure Marketplace DataMarket var live. Dessverre er det bare et lite antall datasett tilgjengelig på det akkurat nå, men et av dem var tilfeldigvis datasettet jeg ønsket, og det var tilgjengelig gratis. Snakk om lykke til! Jeg laget raskt en ny Windows Phone 7-applikasjon og prøvde å legge til referansen, bare for å bli stoppet i sporene mine med denne feilen: "Denne tjenesten kan ikke forbrukes av det nåværende prosjektet. Sjekk om prosjektets rammeverk støtter denne tjenestetypen ."

Det viser seg at Windows Phone 7 ble lansert uten mulighet til å få tilgang til WCF Data Services. Jeg er ikke sikker på hvem som tok denne avgjørelsen, for Windows Phone 7 stemmer godt overens med Azure Marketplace DataMarket, det er ganske avhengig av webtjenester for å gjøre noe nyttig, og Microsoft prøver å presse WCF Data Services. Min første forskning fant bare en CTP fra mars 2010 for å gi denne informasjonen. Jeg spurte rundt og fant ut at koden for å gjøre bare dette ble kunngjort på PDC nylig og var tilgjengelig gratis på CodePlex.

Noe å huske på er at Windows Phone 7-applikasjoner må være lydhøre når du utfører behandling og må støtte kansellering av "langvarige" prosesser. Etter min erfaring med søknadssertifiseringsprosessen, fikk jeg en app avvist for ikke å støtte avbestilling, selv om det ville ta høyst tre sekunder å behandle. Så nå er jeg veldig forsiktig med å sørge for at søknadene mine støtter kansellering.

Å bruke Open Data Protocol (OData) -biblioteket er et blunk. Her er hva jeg gjorde for å kunne bruke en OData-tjeneste fra Windows Phone 7-programmet:

  1. Last ned filen ODataClient_BinariesAndCodeGenToolForWinPhone.zip.
  2. Pakk den ut.
  3. I Windows Utforsker, gå til Egenskaper-siden for hver av DLL-ene, og klikk på Fjern blokkering-knappen.
  4. I Windows Phone 7-applikasjonen min i Visual Studio 2010 legger du til en referanse til filen System.Data.Services.Client.dll som jeg pakket ut.
  5. Åpne en ledetekst, og naviger til katalogen til de unzippede filene.
  6. Kjør kommandoen: DavaSvcUtil.exe / uri: UrlToService / out: PathToCSharpFile (i mitt tilfelle brukte jeg https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes for URL og . \ DataGovCrime .cs for min utdatafil). Dette skaper en sterkt typet proxy-klasse til datatjenesten.
  7. Jeg kopierte denne filen til katalogen til Visual Studio-løsningen og la den deretter til løsningen.
  8. Jeg opprettet koden min rundt avbestilling og utførelse. Fordi jeg ikke gjør noe veldig komplisert, og fordi OData-komponenten allerede støtter asynkron prosessering, tok jeg en bakdørshack-tilnærming til dette for enkelhets skyld. Jeg har bare booleanere som indikerer tilstanden "Running" og "Canceled". Hvis hendelsesbehandleren for fullføringen av tjenesteforespørselen ser at forespørselen er kansellert, gjør den ingenting.

Det var ett stort problem: OData Client Library støtter ikke godkjenning, i det minste ikke på et lett tilgjengelig nivå. Heldigvis er det flere løsninger.

  • Det første alternativet er det som ble anbefalt på PDC: konstruer URL-en for å spørre dataene manuelt, og bruk WebClient-objektet til å laste ned XML-dataene og deretter analysere dem manuelt (ved å bruke LINQ til XML, for eksempel). Dette gir deg ultimate kontroll og lar deg gjøre alle slags autentisering du måtte ønske deg. Imidlertid gir du opp ting som sterkt typede proxy-klasser, med mindre du har lyst til å skrive koden for det selv (ha det gøy).
  • Det andre alternativet, foreslått av bruker sumantbhardvaj i diskusjonen for OData Client Library, er å koble til SendingRequest-hendelsen og legge til autentiseringen. Du kan finne eksemplekoden hans på CodePlex-siden. Jeg personlig har ikke prøvd dette, så jeg kan ikke gå god for resultatet, men det virker som en veldig rimelig tilnærming til meg.
  • Et annet alternativ som har blitt foreslått for meg er å bruke Hammock-biblioteket i stedet.

For enkle datasett er WebClient-metoden trolig den enkleste måten å få det til raskt og uten å måtte lære noe nytt.

Selv om det er uheldig at opplevelsen av å jobbe med OData ikke er hva den skal være, er det nok alternativer der ute som du ikke trenger å sitte igjen i kulda.

Mer om Windows Phone 7 på TechRepublic

  • Mitt første Windows Phone 7 app-utviklingsprosjekt
  • Windows Phone 7 App Hub-opplevelsen
  • Optimaliser datatilgang for mobiltelefonapper
  • Windows Phone 7 gjennom utviklerens øyne
  • Samsung Focus, et Windows Phone 7 kraftverk
  • TechRepublic sin fokusside for Windows Phone 7

J.Ja

Avsløring av Justin's tilknytning til industrien: Justin James har en kontrakt med Spiceworks for å skrive produktkjøpsguider; han har en kontrakt med OpenAmplify, som eies av Hapax, for å skrive en serie blogger, opplæringsprogrammer og artikler; og han har en kontrakt med OutSystems om å skrive artikler, eksempelskode, etc.

© Copyright 2021 | mobilegn.com