Alle Windows Phone-enheter har en innebygd nettverksforbindelse, men av samme grunn lærte vi å lagre data lokalt, vi må være klare til å administrere hvordan brukerne bruker programmet, mens en tilkobling mangler.
I dette formålet inneholder Windows Phone-rammeverket en klasse som kan brukes til å oppdage informasjon om den kalt Internett-tilkoblingen DeviceNetworkInformation
, som er en del av Microsoft.Phone.Net.NetworkInformation
namespace.
Den viktigste er IsNetworkAvailable
, som forteller oss om en Internett-tilkobling er tilgjengelig. Vi bør alltid bruke denne API-en før du utfører en operasjon som krever en tilkobling, som følgende eksempel:
privat ugyldig OnCheckConnectionClicked (objekt sender, RoutedEventArgs e) if (DeviceNetworkInformation.IsNetworkAvailable) MessageBox.Show ("Du er koblet til Internett"); // Utfør nettverksoperasjoner. else MessageBox.Show ("Du er ikke koblet til Internett");
Klassen tilbyr også en hendelse som heter NetworkAvailabilityChanged
som utløses hver gang forbindelsesstatusen endres. Det er nyttig hvis du raskt vil reagere på nettverksendringer, for eksempel aktivering eller deaktivering av visse programfunksjoner.
offentlig MainPage () InitializeComponent (); DeviceNetworkInformation.NetworkAvailabilityChanged + = DeviceNetworkInformation_NetworkAvailabilityChanged; privat tomt DeviceNetworkInformation_NetworkAvailabilityChanged (objekt sender, NetworkNotificationEventArgs e) if (e.NotificationType == NetworkNotificationType.InterfaceDisconnected) MessageBox.Show ("Disconnected"); annet hvis (e.NotificationType == NetworkNotificationType.InterfaceConnected) MessageBox.Show ("Connected");
Returparametrene inneholder en eiendom som kalles NotificationType
, av typen NetworkNotificationType
, som forteller oss gjeldende nettverksstatus.
Men med DeviceNetworkInformation
Du kan også få annen informasjon om den nåværende nettverksstatusen, for eksempel om brukeren har aktivert mobildataforbindelsen (IsCellularDataEnabled
), Wi-Fi-tilkoblingen (IsWiFiEnabled
) eller roaming-alternativer (IsCellularDataRoamingOptions
).
Rammen tilbyr en annen nyttig klasse for å håndtere nettverksforbindelser som kalles NetworkInterface
. Ved å bruke NetworkInterfaceType
eiendom, vil du kunne identifisere hvilken tilkoblingstype som for øyeblikket er i bruk. For eksempel kan vi bruke denne egenskapen for å unngå å laste ned store filer mens du bruker en mobil forbindelse.
NetworkInterfaceType
er en oppregner som kan anta mange verdier. De viktigste er:
MobileBroadbandGsm
og MobileBroadbandCdma
når telefonen er koblet til et mobilnettverk (GSM eller CDMA, i henhold til landet)Wireless80211
, når telefonen er koblet til et Wi-Fi-nettverkI den følgende prøven viser vi en melding på skjermen med gjeldende tilkoblingstype:
privat ugyldig OnCheckConnectionTypeClicked (objekt sender, RoutedEventArgs e) if (NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandGsm || NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandCdma) MessageBox.Show ("Mobile"); annet hvis (NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) MessageBox.Show ("Wi-Fi");
Windows Phone Framework har to innebygde klasser for å utføre nettverksoperasjoner: WebClient
og HttpWebRequest
. Dessverre er ingen av dem perfekte. WebClient
er veldig enkelt å bruke, men det er basert på den gamle tilbakeringingsmetoden (med mindre du installerer Asynk for. NET pakke vi diskuterte tidligere i denne serien). HttpWebRequest
er veldig kraftig, men det er komplisert å bruke og basert på et gammelt asynkront mønster som er vanskelig å forstå.
Windows Runtime har introdusert en ny klasse som heter Httpclient
, som tar det beste fra begge verdener. Det er kraftig og gir god ytelse, men det er enkelt å bruke og tilbyr metoder som er basert på det nye asynk og ventende mønsteret. Denne klassen er tilgjengelig i hele Windows Runtime for Windows Store-apper, men den er ikke inkludert i Windows Phone Runtime-undersettet. Du må installere den fra NuGet.
De Httpclient
klassen, som vi ser senere, er flott, ikke bare for å utføre generiske nettverksoperasjoner som nedlasting og opplasting av filer, men også for samhandling med webtjenester. Faktisk utsetter den asynkrone metoder for hver HTTP-kommando, som GET, POST, PUT, etc.
Merk: For å kunne kommunisere med nettverket må du aktivere ID_CAP_NETWORKING-alternativet i manifestfilen. Den er aktivert i hvert nytt Windows Phone-prosjekt som standard.
Filer lastes vanligvis ned med GET HTTP-kommandoen, så Httpclient
tilbyr GetAsync ()
metode. Å gjøre utviklerne liv enklere, Httpclient
har noen innebygde metoder for å laste ned de vanligste filtypene, for eksempel GetStringAsync ()
for nedlasting av tekstfiler som XML-, RSS- eller REST-svar; eller GetByteArrayAsync ()
og GetStreamAsync ()
for å få binært filinnhold.
Det er veldig enkelt å laste ned strenger. Metoden GetStringAsync ()
krever som en parameter filens URL og returnerer filens innhold som en streng. I følgende eksempel kan du se hvordan du laster ned bloggens RSS-feed:
privat asynk ugyldig OnDownloadStringClicked (objekt sender, RoutedEventArgs e) HttpClient client = new HttpClient (); strengresultat = vent klient.GetStringAsync ("http://feeds.feedburner.com/qmatteoq_eng");
Når du har strengen, kan du utføre de nødvendige operasjonene i henhold til ditt scenario. I forrige eksempel kunne jeg ha analysert den returnerte XML med LINQ til XML for å vise nyhetslisten på skjermen.
Nedlasting av binære filer kan oppnås på mange måter. Du kan bruke GetByteArrayAsync ()
Hvis du foretrekker å jobbe med byte, eller GetStreamAsync ()
hvis du foretrekker å manipulere filens innhold som en strøm.
I følgende eksempel ser du hvordan du laster ned et bilde ved hjelp av GetByteArrayAsync ()
metode. Den returnerer en bytes array, som lett kan lagres i lokal lagring ved hjelp av APIene vi lærte om tidligere i denne serien.
privat asynk ugyldig OnDownloadFileClicked (objekt sender, RoutedEventArgs e) HttpClient client = new HttpClient (); byte [] bytes = avventer client.GetByteArrayAsync ("http://www.syncfusion.com/Content/en-US/Home/Images/syncfusion-logo.png"); StorageFile storageFile = avventer ApplicationData.Current.LocalFolder.CreateFileAsync ("picture.png", CreationCollisionOption.ReplaceExisting); IRandomAccessStream accessStream = venter storageFile.OpenAsync (FileAccessMode.ReadWrite); bruker (IOutputStream outputStream = accessStream.GetOutputStreamAt (0)) DataWriter writer = new DataWriter (outputStream); writer.WriteBytes (bytes); venter på writer.StoreAsync ();
Ved å bruke DataWriter
klasse, vi er i stand til å lagre byte array returnert av Httpclient
klasse inn i en fil i lokal lagring kalt picture.png.
Hvis du trenger full kontroll over nedlastingsoperasjonen, kan du bruke generisk GetAsync ()
metode, som returnerer a HttpResponseMessage
objekt med hele responsens innhold, som overskrifter, statuskode osv.
I følgende eksempel kan du se hvordan, ved å bruke GetAsync ()
metode, vi kan laste ned et bilde som en Strøm
og vis den i en Bilde
kontroll plassert på siden. Til metoden passerer vi en andre parameter av typen HttpCompletionOption
, som forteller klassen når du skal markere operasjonen som fullført. Siden vi vil ha hele innholdet i svaret (som er det nedlastede bildet), bruker vi ResponseContentRead
alternativ.
privat asynk ugyldig OnDownloadStreamClicked (objekt sender, RoutedEventArgs e) HttpClient client = new HttpClient (); HttpResponseMessage httpResponseMessage = avventer client.GetAsync ("http://www.syncfusion.com/Content/en-US/Home/Images/syncfusion-logo.png", HttpCompletionOption.ResponseContentRead); Stream stream = venter httpResponseMessage.Content.ReadAsStreamAsync (); BitmapImage image = nytt BitmapImage (); image.SetSource (strøm); Logo.Source = image;
Legg merke til at de spesifikke metodene vi har sett tilbys av Httpclient
Klassen er rett og slett en snarvei til metodene som tilbys av Innhold
eiendom av HttpResponseMessage
klasse (i den forrige prøven bruker vi ReadAsStreamAsync ()
Metode for å returnere responsens innhold som en Strøm
).
Opplasting av data oppnås på lignende måte: operasjonen utføres vanligvis ved hjelp av POST-kommandoen, slik at Httpclient
klassen avslører PostAsync ()
metode for dette formålet.
Innholdet som skal sendes, er utarbeidet ved hjelp av HttpContent
klassen, som tilbyr mange implementeringer: StreamContent
å sende en fils strøm, ByteArrayContent
å sende en binær fil, StringContent
å sende en streng, eller MultipartFormDataContent
å sende innhold som er kodet ved hjelp av MIME-typen for flere / form-data.
I følgende eksempel kan du se hvordan du laster opp en fils strøm til en tjeneste:
privat asynk ugyldig OnUploadFileClicked (objekt sender, RoutedEventArgs e) StorageFile storageFile = venter ApplicationData.Current.LocalFolder.GetFileAsync ("picture.png"); IRandomAccessStream accessStream = venter storageFile.OpenAsync (FileAccessMode.ReadWrite); HttpClient klient = ny HttpClient (); HttpContent content = nytt StreamContent (accessStream.AsStreamForRead ()); venter klient.PostAsync ("http://wp8test.azurewebsites.net/api/values", innhold);
Etter at vi har hentet strømmen av en fil som er lagret i lokal lagring, sender vi det til en ny forekomst av StreamContent
klasse. Så kaller vi PostAsync ()
metode, passerer tjenestens URL og HttpContent
objekt som parametere.
REST (Representational State Transfer) er uten tvil den mest brukte tilnærmingen i dag i webtjenesteutvikling, spesielt i mobilverdenen.
REST-tjenester har blitt veldig populære av to grunner:
Nesten hver plattform støtter disse teknologiene, slik at du ikke trenger å lete etter spesialbiblioteker for å samhandle med dem som er nødvendig for WSDL-baserte webtjenester.
Vi har allerede sett hvordan, med Httpclient
klassen, er det enkelt å samhandle med Internett ved å bruke standard HTTP-kommandoer. Mesteparten av tiden, for å samhandle med en REST-tjeneste, må du ganske enkelt utføre GetStringAsync ()
metode for å få XML eller JSON respons.
Når du har resultatet, må du mesteparten av tiden konvertere den til objekter som skal brukes i applikasjonen. Tidligere i denne serien diskuterte vi den enkleste måten å oppnå denne oppgaven: deserialisering, som betyr å oversette ren tekst til komplekse objekter. Vi kan bruke DataContractSerializer
eller DataContractJsonSerializer
klasser for å gjøre dette. I dette tilfellet må du bare henvise til deserialiseringsprosessen siden prosedyren er den samme.
privat asynk ugyldig OnConsumeServiceClicked (objekt sender, RoutedEventArgs e) HttpClient client = new HttpClient (); strengresultat = vent på client.GetStringAsync ("http://wp8test.azurewebsites.net/api/values"); bruker (MemoryStream ms = new MemoryStream (Encoding.Unicode.GetBytes (result))) DataContractJsonSerializer serializer = ny DataContractJsonSerializer (typeof (Liste)); Liste people = serializer.ReadObject (ms) som Liste ;
Vi antar at tjenesten returnerer, i JSON-format, en liste over personer:
["id": 1, "navn": "Matteo", "etternavn": "Pagani", "id": 2, "navn": "John", "etternavn": "Doe"]
Med hjelp av DataContractJsonSerializer
klasse, kan vi konvertere forrige JSON til en liste over Person
objekter, som er den samme klassen vi har brukt i mange andre prøver i denne serien. Forskjellen i denne prøven er at vi er i stand til å kontrollere serialiseringsprosessen, for eksempel er eiendomsnavnene som returneres fra JSON, annerledes enn de vi bruker i våre klasser. Dette er et veldig vanlig scenario når det gjelder JSON siden eiendomsnavn er vanligvis små bokstaver, mens i C # -objekter er de CamelCase. Dette resultatet oppnås ved å bruke [DataMember]
attributt, som kan brukes til egenskapene vi vil serialisere. I følgende eksempel kan du se at attributtet gir en eiendom som heter Navn
, som kan brukes til å spesifisere hvilket eiendomnavn vi forventer å finne i JSON-filen.
offentlig klasse Person [DataMember (Name = "id")] offentlig int Id get; sett; [DataMember (Name = "name")] offentlig streng Navn get; sett; [DataMember (Name = "etternavn")] offentlig streng Etternavn get; sett;
Denne tilnærmingen har en downside: REST-tjenester returnerer alltid en vanlig streng, mens DataContractJsonSerializer
klassen krever a Strøm
som en inngangsparameter for ReadObject ()
metode, så vi er alltid tvunget til å konvertere den med en Memory
gjenstand.
Det er en annen måte å oppnå det samme resultatet på. La meg introdusere JSON.NET, et tredjepartsbibliotek som tilbyr noen ekstra nyttige funksjoner for å håndtere JSON-data. I tillegg gir den bedre ytelse og kan deserialisere komplekse JSON-filer raskere.
Det kan enkelt installeres ved hjelp av NuGet, og dets offisielle nettside tilbyr sammenligninger med andre JSON-biblioteker og detaljert dokumentasjon.
I følgende eksempel bruker vi JSON.NET til å oppnå samme resultat som koden vi tidligere har brukt:
privat asynk ugyldig OnGetDataClicked (objekt sender, RoutedEventArgs e) HttpClient client = new HttpClient (); strengresultat = vent på client.GetStringAsync ("http://wp8test.azurewebsites.net/api/values"); Listefolk = JsonConvert.DeserializeObject > (Resultat);
De JsonConvert
klasse (som er en del av Newtonsoft.Json
namespace) avslører DeserializeObject
metode, hvor T
er objektets type vi forventer i retur. Som en inngangsparameter krever det bare JSON-strengen som vi har lastet ned fra tjenesten.
Det er også mulig å kontrollere deserialiseringsprosessen ved hjelp av attributter, som vi tidligere gjorde med DataMember
Egenskap. I følgende eksempel kan du se hvordan vi kan manuelt definere hvordan JSON-egenskaper skal oversettes:
offentlig klasse Person [JsonProperty ("id")] offentlig int Id get; sett; [JsonProperty ("navn")] offentlig streng Navn get; sett; [JsonProperty ("etternavn")] offentlig streng Etternavn get; sett;
Tips: Du må ofte bruke tredjepartstjenester, slik at du ikke vet nøyaktig kartlegging mellom enheter og JSON-data. Det er et nettsted som vil hjelpe deg i dette scenariet: http://json2csharp.com/. Bare lim inn JSON returnert av din tjeneste, og det vil generere for deg de nødvendige C # -klassene for å kartlegge JSON-dataene.
En annen interessant funksjon introdusert av JSON.NET er LINQ til JSON, som er et LINQ-basert språk som, ligner på LINQ til XML, kan brukes til å manipulere en JSON-streng for å trekke ut akkurat den informasjonen du trenger. Denne tilnærmingen er nyttig når du ikke virkelig trenger å bruke deserialisering, men trenger bare å trekke ut noen data fra JSON-responsen du mottok fra tjenesten.
Utgangspunktet for å bruke LINQ til JSON er JObject
klassen, som identifiserer en JSON-fil. For å begynne å jobbe med det, må du bare ringe Parse ()
metode som passerer som parameter JSON-strengen, som vist i følgende prøve:
privat async void OnParseJson (objekt sender, RoutedEventArgs e) HttpClient client = new HttpClient (); strengresultat = vent på client.GetStringAsync ("http://wp8test.azurewebsites.net/api/values"); JObject json = JObject.Parse (resultat);
Nå er du klar til å utføre noen operasjoner. La oss ta en titt på de vanligste.
Enkel JSON
Her er et eksempel på en enkel JSON-fil:
"Id": 1, "Navn": "Matteo", "Etternavn": "Pagani"
Med LINQ til JSON kan vi trekke ut en enkelt eiendoms verdi på følgende måte:
privat async void OnParseJson (objekt sender, RoutedEventArgs e) HttpClient client = new HttpClient (); strengresultat = vent på client.GetStringAsync ("http://wp8test.azurewebsites.net/api/values/1"); JObject json = JObject.Parse (resultat); streng verdi = json ["Navn"]. Verdi();
De JObject
klassen behandles som en samling, slik at du enkelt kan få tilgang til en eiendom med navnet som nøkkel. Til slutt kan du pakke ut verdien ved å bruke Verdi
metode, hvor T
er datatypen vi forventer å bli lagret.
Kompleks JSON
Som C # -objekter kan JSON-objekter også ha komplekse egenskaper, som vist i følgende eksempel:
"Id": 1, "Navn": "Matteo", "Etternavn": "Pagani", "Adresse": "Gate": "Feil adresse", "By": "Milano"
Adresse
er en kompleks egenskap fordi den inneholder andre nestede egenskaper. For å få tilgang til disse egenskapene, må vi bruke SelectToken ()
metode, passerer hele JSON banen som en parameter:
privat async void OnParseJson (objekt sender, RoutedEventArgs e) HttpClient client = new HttpClient (); strengresultat = vent på client.GetStringAsync ("http://wp8test.azurewebsites.net/api/values/1"); JObject json = JObject.Parse (resultat); string city = json.SelectToken ("Address.City"). Verdi();
Med Address.City
sti, vi er i stand til å trekke ut verdien av By
eiendom som er en del av Adresse
node.
JSON samlinger
Når du håndterer JSON samlinger, kan du bruke Barn ()
metode for å få tilgang til alle barns noder av en bestemt eiendom. La oss for eksempel bruke en JSON-kode som vi tidligere har sett:
["Id": 1, "Navn": "Matteo", "Etternavn": "Pagani", "Id": 2, "Navn": "John", "Etternavn": "Doe"]
I dette tilfellet kan vi bruke JArray
klasse og Barn ()
metode for å trekke ut alle samlingens elementer. I den følgende prøven kan du se hvordan vi bruker den til å få en delkolleksjon med bare Navn
eiendomens verdier.
privat asynk ugyldig OnGetDataClicked (objekt sender, RoutedEventArgs e) HttpClient client = new HttpClient (); strengresultat = vent på client.GetStringAsync ("http://wp8test.azurewebsites.net/api/values"); JArray json = JArray.Parse (resultat); Listelist = json.Children (). Velg (x => x ["Navn"]. Verdi ()).Ramse opp();
De Httpclient
klasse vi tidligere har sett, som WebClient
og HttpWebRequest
klasser, kan bare brukes til forgrunnsoperasjoner. Når programmet er suspendert, blir nettverksoverføringene avbrutt.
Når vi må håndtere store dataoverføringer, tvinger brukeren til å holde appen åpen, skaper ikke den beste brukeropplevelsen. For dette scenariet har Windows Phone 7.5 introdusert API for bakgrunnsoverføring som kan brukes til å starte en nedlastings- eller opplastingsoperasjon, og for å fortsette den, selv om appen er suspendert.
Det er imidlertid noen begrensninger som er innført for å unngå batteriproblemer og høyt dataplanforbruk:
En bakgrunnsoverføring identifiseres av BackgroundTransferRequest
klasse, som er en del av Microsoft.Phone.BackgroundTransfer
navnerom. Som utviklere har vi kontroll over noen forhold som må tilfredsstilles for en bakgrunnsoverføring som er opprettet i vår søknad, for å starte, takket være TransferPreferences
eiendom som kan få følgende verdier:
Ingen
, standardverdien: Overføringen starter bare hvis telefonen er koblet til et Wi-Fi-nettverk og batteriet lades.AllowBattery
: Overføringen starter bare hvis telefonen er koblet til et Wi-Fi-nettverk, uavhengig av strømkilden.AllowCelullar
: Overføringen starter bare hvis telefonen lades, uavhengig av nettverkstilkoblingen.AllowCellularAndBattery
: Startes alltid overføringen, uansett tilkobling og strømkildeforhold.
De BackgroundTransferRequest
klassen avslører to hendelseshåndterere som kan brukes til å kontrollere overføringen:
TransferStatusChanged
utløses når overføringsstatus endres. Parameteren returnert med metoden inneholder a TransferStatus
objekt som forteller deg om gjeldende status (som fullført
når overføringen slutter, eller pauset
når overføringen er pauset). Det er også spesifikke statuser som starter med Venter
prefiks som forteller deg når en overføring er suspendert fordi betingelsene som er definert i TransferPreferences
Eiendommen er ikke fornøyd. For eksempel, WaitingForWiFi
er angitt når overføringen venter på at telefonen skal være koblet til et Wi-Fi-nettverk for å starte.TransferProgressChanged
utløses når en overførings fremdrift endres, noe som betyr at nye data er lastet ned eller lastet opp. Vanligvis er denne hendelseshandleren koblet til en ProgressBar
kontroll siden det avslører egenskaper for å varsle deg hvor mye data har blitt overført og hvor mye data som fortsatt må lastes ned eller sendes.Når du har definert en bakgrunnsoverføring, må du legge den til i operativsystemets kø. Windows Phone vil ta vare på å starte den når de angitte vilkårene er oppfylt. For å utføre denne oppgaven bruker vi BackgroundTransferService
klassen, som er den sentrale bakgrunnsoverføringslederen. Du kan legge til, fjerne eller liste bakgrunnsoverføringer som tilhører programmet.
I følgende eksempel kan du se en bakgrunnsoverføringsdefinisjon:
privat BackgroundTransferRequest backgroundRequest; privat ugyldig OnStartBackgroundDownloadClicked (objekt sender, RoutedEventArgs e) Uri sourceUrl = ny Uri ("http://wpsauce.com/wp-content/uploads/2011/11/windows_phone_logo.jpg"); Uri destinationUrl = ny Uri ("/ Shared / Transfers / windows_phone_logo.jpg", UriKind.RelativeOrAbsolute); backgroundRequest = ny BackgroundTransferRequest (sourceUrl, destinationUrl); backgroundRequest.TransferStatusChanged + = backgroundRequest_TransferStatusChanged; backgroundRequest.TransferPreferences = TransferPreferences.AllowCellularAndBattery; BackgroundTransferService.Add (backgroundRequest); ugyldig bakgrunnRequest_TransferStatusChanged (objekt sender, BackgroundTransferEventArgs e) if (backgroundRequest.TransferStatus == TransferStatus.Completed) // Administrer den nedlastede filen. BackgroundTransferService.Remove (backgroundRequest);
Vi registrerer denne overføringen som skal utføres uavhengig av tilgjengelig nettverksforbindelse og strømkilde. Den forrige prøven er relatert til en nedlastingsoperasjon, så vi må definere en kilde URI (filen som skal lastes ned) og en destinasjons-URI (den lokale lagringsbanen der filen skal lagres). I motsetning til hva vi har sett med Httpclient
, vi behøver ikke ta vare på spareprosessen; filen lastes automatisk ned og lagres i lokal lagring, siden nedlastingen også kan avsluttes når appen er suspendert. Både kilde- og destinasjons-URI er bestått som parametere for BackgroundTransferRequest
konstruktør.
Merk: Bakgrunnsoverføringer som brukes til å utføre nedlastingsoperasjoner, må alltid lagre filen i delen Delt / Overføringer i lokal lagring, som automatisk opprettes når appen er installert, ellers får du et unntak. Når nedlastingen er fullført, kan du flytte filen til en annen posisjon om nødvendig, men du kan ikke planlegge en bakgrunnsoverføring som prøver å laste ned en fil i en annen mappe.
Deretter abonnerer vi på TransferStatusChanged
begivenhet. Hvis nedlastingen er fullført mens appen er i forgrunnen, kan vi administrere den nedlastede filen, for eksempel hvis det er et bilde, kan vi vise det. Legg merke til Fjerne()
operasjon som vi utfører på BackgroundTransferService
klasse. Det er veldig viktig å alltid utføre denne oppgaven fordi operativsystemet ikke automatisk fjerner fullførte overføringer fra programmets kø, og det kan føre til uventede problemer, siden et program ikke kan planlegge mer enn 25 overføringer.
I stedet, hvis du trenger å laste opp en fil, må du opprette en BackgroundTransferRequest
objekt på en annen måte. Du må fortsatt definere to URIer: kilden (filen som skal lastes opp) og destinasjonen (en tjeneste som kan motta filen ved hjelp av HTTP-kommandasettet i Metode
eiendom). Destinasjons URI kan bestås i BackgroundTransferRequest
Konstruktør (som vi gjorde tidligere), men kilden URI må settes inn i UploadLocation
eiendom, som i følgende utvalg:
privat ugyldig OnUploadFile () Uri destinationUrl = ny Uri ("http://wp8test.azurewebsites.com/api/values", UriKind.Relative); Uri sourceUri = ny Uri ("/ Shared / Transfers / image.png", UriKind.Relative); BackgroundTransferRequest request = ny BackgroundTransferRequest (destinationUrl); request.UploadLocation = sourceUri; request.Method = "POST"; BackgroundTransferService.Add (forespørsel);
I denne artikkelen har vi sett hvordan du arbeider med en av de mest brukte funksjonene i en smarttelefon: en Internett-tilkobling. I detalj har vi lært:
Httpclient
er en ny klasse introdusert i Windows Runtime som bidrar til å utføre nettverksoperasjoner. Vi har sett hvordan du bruker den til å laste ned og laste opp filer, og samhandle med tjenester.Httpclient
er en stor hjelp, men det fungerer bare hvis søknaden er i forgrunnen. Når den er suspendert, blir nettverksoperasjoner avbrutt. Til dette formål tilbyr rammen noen spesifikke APIer for å utføre nedlasting og opplasting av operasjoner, selv i bakgrunnen når appen ikke er i bruk.Denne opplæringen representerer et kapittel fra Windows Phone 8 Succinctly, en gratis eBook fra teamet ved Syncfusion.