Koble til en ekstern database med NuSOAP

Mange mobile applikasjoner bruker eksterne databaser som ligger eksternt på Internett. I den følgende opplæringen vil vi opprette en enkel database, koble til den og motta eller sende data fra denne kilden. For å gjøre dette vil vi bruke en Windows Phone 7 Silverlight-basert applikasjon og en NuSOAP webtjeneste. La oss begynne!


1. Installer programvaren

Før vi starter, må vi installere følgende programmer:

  • Windows Phone 7.5 SDK
  • Silverlight 5 Toolkit
  • PHP-bibliotek for å kjøre webtjenesten (NuSOAP)

Tydeligvis vil vi også trenge en slags web hosting der vi kan lage en database. De fleste gratis hosting alternativer vil være nok for oss, men de kan ha noen begrensninger som jeg vil diskutere senere i denne opplæringen.

Vi trenger også en FTP-klient. I denne opplæringen vil jeg bruke en FireFTP tillegg til Mozilla Firefox. Men du kan bruke alt du vil.

Når alle programmene er installert, kan vi fortsette.


2. Opprette en ekstern database

Trinn 1

For å begynne å sjekke at verten bruker phpMyAdmin fordi jeg bruker den i eksemplene. Men hvis du velger å bruke noe annet, skal alle kommandoene være like.

Først må vi opprette en enkel database, i vårt tilfelle vil den bare inneholde ett bord og tre attributter:

  • ID - denne verdien identifiserer posten. Den må settes som en autoincrement felt.
  • Fornavn
  • Etternavn

Tabellnavnet er MyUsers.

For å gjøre dette klikker du bare "opprett bord":

Steg 2

Deretter fyller du i cellene som vist på dette skjermbildet:

Bordstrukturen skal nå se slik ut:

Trinn 3

På dette trinnet må vi legge merke til noen viktige punkter:

  • Vertsadresse

Som jeg skrev tidligere, har gratis vertene grenser, en av disse er muligens bare koble fra lokal vert, Husk at!

  • Databasebruker

Vårt brukernavn for å logge inn i databasen:

  • Database passord
  • Database navn

3. NuSOAP Server - Start Web Service

Trinn 1

Starte vår webtjeneste er veldig enkel:

Først må vi kopiere noen filer til ftp-serveren. Jeg anbefaler en ftp-server fordi den er direkte forbundet med vår hosting på grunn av lokal vert utgave.

Når vi er koblet, må vi kopiere filen nusoap.php som ble lastet ned tidligere. Vi krever også en fil som inneholder spesifikke funksjoner skrevet av oss som er nødvendige for vår søknad; Jeg ringte det MyService.php.

Steg 2

Etter at vi har kopiert filene, våre FTP rotkatalogen bør se ut som bildet nedenfor:

Åpne nå MyService.php filen og skriv inn den:

 configureWSDL ('MyService', 'urn: MyService'); // Tegnkoding $ server-> soap_defencoding = 'utf-8'; // ------------------------------------------------ - // Registreringer av våre funksjoner // ----------------------------------------- -------- // Våre webservicefunksjoner vil være her. // ------------------------------------------------ - $ HTTP_RAW_POST_DATA = isset ($ HTTP_RAW_POST_DATA)? $ HTTP_RAW_POST_DATA: "; $ server-> service ($ HTTP_RAW_POST_DATA);?>

De viktigste punktene er forklart i de øvre kommentarene for å kode.

Trinn 3

Fra nå av skal tjenesten vår fungere. Vi kan sjekke dette ved å skrive inn nettleseren:

http://www.ourdomain.com/MyService.php

Hvis alt gikk bra, bør du se noe slikt:

Etter at vi har startet webtjenesten, kan vi gå til neste trinn.


4. Skrive Web Service Funksjoner

I vår tjeneste trenger vi to funksjoner:

  • Den første funksjonen legger til data i den elektroniske databasen.
  • Den andre funksjonen mottar data fra den.

Trinn 1

La oss åpne MyService.php. Vi må registrere den nye funksjonen, for å gjøre dette skal vi skrive:

 $ server-> register ('InsertData', // Navn på funksjonsarrangement ('FirstName' => 'xsd: streng', 'LastName' => 'xsd: streng'), // Input Values ​​array > 'xsd: boolean'), // Output Values ​​'urn: MyServicewsdl', // NameSpace 'urn: MyServicewsdl # InsertData', // SoapAction 'rpc', // stil 'literal', // kan bli kodet, men det Fungerer ikke med Silverlight 'Some_comments_about_function');

Husk at den må plasseres før kroppsfunksjonen og etter serverdirektivene.

Her er noen kodeforklaring:

 'FirstName' => 'xsd: streng'

"Fornavn" er navnet på variabel, "Streng" er typen av variabel (dvs. det kan være int, longint, boolsk, etc.).

Når funksjonen registrerer, må vi skrive kroppen av den. Nedenfor er koden og forklaringen:

 funksjon InsertData ($ FirstName, $ LastName) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword")); hvis ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName ""); returnere sant;  returnere false; 
 InsertData ($ FirstName, $ LastName)

Her er navnet på funksjonen og dets attributter. De må være de samme som i registreringsdelen.

 $ connect = mysql_pconnect ("Host", "UserName", "UserPassword");

Her kan vi sette inn dataene vi la merke til da vi opprettet databasen.

 hvis (mysql_select_db ("DatabaseName", $ connect)) 

Og også her.

Etter det er det et enkelt MySQL-spørring som legger til data i vår database:

 mysql_query ("INSERT INTO MyUser SET FistName =" $ FirstName ", LastName =" $ LastName "");

Steg 2

Nå er det på tide å skrive den andre funksjonen. Strukturen vil ligne den første.

Her er kode for metoderegistrering:

 $ server-> register ('GetData', array ('ID' => 'xsd: int'), array ('return' => 'xsd: streng'), 'urn: MyServicewsdl', 'urn: MyServicewsdl # GetData ',' rpc ',' literal ',' Noen kommentarer om funksjon 2 ');

De viktigste forskjellene er i delen Input / Output-verdier (endrede typer variabler).

Her er kroppens funksjonskode:

 funksjon GetData ($ ID) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); hvis ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) $ sql = "SELECT Fornavn, LastName FROM MyUser WHERE ID = '$ ID'"; $ result = mysql_fetch_array (mysql_query ($ sql)); returnere $ resultat ['FirstName']. "-". $ resultat ['LastName'];  returnere false; 

Her er en liten kodeforklaring:

 returnere $ resultat ['FirstName']. "-". $ resultat ['LastName'];

Denne linjen angir hva som må returnere til Windows Phone-programmet.

Trinn 3

Etter å ha skrevet alle funksjonene, burde MyService.php-filen se slik ut:

 soap_defencoding = 'utf-8'; // ------------------------------------------------ - // Register InsertData-funksjon $ server-> register ('InsertData', array ('FirstName' => 'xsd: streng', 'LastName' => 'xsd: streng'), array ('return' => 'xsd : boolsk '),' urn: MyServicewsdl ',' urn: MyServicewsdl # InsertData ',' rpc ',' literal ',' Noen kommentarer om funksjon '); // Register GetData-funksjon $ server-> register ('GetData', array ('ID' => 'xsd: int'), array ('return' => 'xsd: streng'), 'urn: MyServicewsdl' urn: MyServicewsdl # GetData ',' rpc ',' literal ',' Noen kommentarer om funksjon 2 '); // ------------------------------------------------ - // Body InsterData funksjon funksjon InsertData ($ FirstName, $ LastName) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); hvis ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName ""); returnere sant;  returnere false;  // Body GetData funksjon funksjon GetData ($ ID) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); hvis ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) $ sql = "SELECT Fornavn, LastName FROM MyUser WHERE ID = '$ ID'"; $ result = mysql_fetch_array (mysql_query ($ sql)); returnere $ resultat ['FirstName']. "-". $ resultat ['LastName'];  returnere false;  // ----------------------------------------------- - $ HTTP_RAW_POST_DATA = isset ($ HTTP_RAW_POST_DATA)? $ HTTP_RAW_POST_DATA: "; $ server-> service ($ HTTP_RAW_POST_DATA);?>

For å validere funksjonene kan vi skrive igjen http://www.ourdomain.com/MyService.php i nettleseren. Nå skal nettstedet se litt annerledes ut, men ligner på dette:

Nå er vi klare til å gå til neste trinn.


5. Opprette en enkel oppsett for et Windows Phone-program

Trinn 1

For det første må vi opprette en Windows Phone-app. La oss kjøre Microsoft Visual Studio for Windows Phone 2010. Etter at Visual Studio starter, klikker du på "File" og deretter "New Project". Du bør se et dialogvindu som i skjermbildet nedenfor:

Vår app vil bruke Silverlight, så vi må sjekke denne malen. Vi kan også endre prosjektnavnet, som lokaliseringer, osv. I mitt tilfelle er prosjektnavnet "MyApplication". Når du har gjort dette, klikker du på OK-knappen.

Steg 2

På dette tidspunktet må vi merke hva vi trenger i vår app. Vi trenger:

  • To tekstbokser for sending av data til databasen (Fornavn, Etternavn)
  • En tekstboks for å motta dataene (ID)
  • To knapper for å godkjenne våre handlinger

Det å legge til objekter (som knapper) i vår applikasjon er enkelt, bare dra det fra "Toolbox" og slipp det på forhåndsvisning av appen. Husk at du har en fri hånd i å sette inn ditt eget layout.

Slik ser det ut på appen min:

Et annet viktig aspekt er navnene på elementene som brukes i Visual Studio (de brukes senere i koden).

For å endre det, klikk bare på elementet. Deretter i egenskaper kan du se tekst som "Tekstboks1", klikk på den, og endre den til noe du kan huske, det er avgjørende. Jeg brukte disse navnene på elementene mine:

  • "FirstNameBox", "LastNameBox" og "IdBox" for tekstbokser
  • "SendBTN" og "ReadBTN" for knapper

Det er alt vi trenger å gjøre i dette trinnet, vi kan fortsette.


6. Koble til Service

For å koble til webtjenesten må vi høyreklikke på "Reference" i "Solution Explorer" dialog og velg "Add Service Reference ..."

Her hvordan ser dette ut:

Deretter vises et nytt vindu. I den må vi skrive adressen til vår webtjeneste og navnet på navneområdet.

I vårt tilfelle vil en adresse bli opprettet, som på denne ordningen: http://www.ourdomain.com/MyService.php?wsdl.

Etter at du har skrevet inn en adresse og klikket på "Go", bør du se noe slikt:

Hvis du ser operasjonene kalt "GetData" og "InsertData", betyr det at forbindelsen ble opprettet! Husk å skrive inn namespace, i mitt tilfelle er det "MyService". Klikk nå OK.


7. Skrive Windows Phone Funksjoner

Vi er nesten på slutten av denne opplæringen; vi trenger bare å skrive to enkle funksjoner.

Trinn 1

Den første funksjonen ligger bak "Send" -knappen, så dobbeltklikk den. Nå må vi legge til øverst på filen et "bruk" direktiv av vår tjeneste:

 bruker MyApplication.MyService;

La oss se på send-funksjonen bak "Send" -knappen, nå er den tom:

 privat tomt SendBTN_Click (objekt sender, RoutedEventArgs e) 

Vår komplette funksjon bør se slik ut:

 privat void SendBTN_Click (objekt sender, RoutedEventArgs e) // Opprette nytt proxy objekt av tjenesten vår MyServicePortTypeClient send = ny MyServicePortTypeClient (); send.InsertDataCompleted + = ny EventHandler(Send_InsertDataCompleted); // Oppkallingsmetode, som parametere skriver vi inn tekst som finnes i FirstNameBox og LastNameBox // Disse dataene blir sendt til webtjeneste og senere til database send.InsertDataAsync (FirstNameBox.Text, LastNameBox.Text);  void send_InsertDataCompleted (objekt sender, InsertDataCompletedEventArgs e) // Hvis serveren returnerer sann, betyr det at vi har lagt til data i databasen ... hvis (e.Result) MessageBox.Show ("Vellykket lagt!"); // ... hvis du returnerer falsk, er vi ikke. annet MessageBox.Show ("Noen problemer oppstod!"); 

De viktigste punktene er forklart i kodekommentarene, men vi må være oppmerksomme på følgende:

Metode "send_InsertDataCompleted" utføres når vi får svar fra serveren. Også denne funksjonen er ikke i "SendBTN" -objektet, den er utenfor.

Nå er det på tide å teste vårt arbeid! Begynn å feilsøke og fylle ut boksene med noen data. Her har jeg skrevet inn John som fornavn og Doe som etternavn, da klikket jeg Send:

La oss se hvordan databasen ser nå ut:

Ja, den nye posten med ID = 1 har dukket opp og alt går bra.

Steg 2

Nå har vi nådd den endelige funksjonen for mottak. Det ligner på forrige metode. Dobbeltklikk på "Les" -knappen og kopier koden:

 private void ReadBTN_Click (objekt sender, RoutedEventArgs e) // Opprette nytt proxy objekt av tjenesten vår MyServicePortTypeClient read = new MyServicePortTypeClient (); read.GetDataCompleted + = new EventHandler(Read_GetDataCompleted); // Oppkallingsmetode, som parametre vi skriver inn tekst som finnes i IdTextBox // men vi må endre teksttype av streng til heltall (ID i webtjeneste har heltalltype) read.GetDataAsync (Convert.ToInt32 (IdBox.Text));  void read_GetDataCompleted (objekt sender, GetDataCompletedEventArgs e) MessageBox.Show (e.Result); 

Dette er samme prosess som før, "read_GetDataCompleted" kjøres etter at du har hentet data fra databasen. I denne metoden bruker vi en meldingskasse for å vise resultatet, dvs. for- og etternavn. Det er enda et skritt å gjøre; Vi må endre type tekst i IdBox fra streng til heltall fordi variablen som heter ID i webtjenesten, har en heltalltype. For å gjøre dette brukte jeg en funksjon som heter "Convert.ToIn32 ()"


8. Testing

Nå kan vi se om dette virker. Skriv inn ID til "IdTextBox". Jeg skrev inn "1", og deretter klikket "Les" -knappen.

Alt jobber! Vår søknad er nå fullført!


Konklusjon

I denne opplæringen opprettet vi en database ved hjelp av en Windows Phone 7 Silverlight-basert applikasjon og NuSOAP webtjeneste. Denne databasen er nyttig for å motta eller sende data. Eksterne databaser er viktige fordi de brukes av mange mobile applikasjoner.