Verbinding maken met een externe database met NuSOAP

Veel mobiele applicaties maken gebruik van externe databases die zich op afstand op internet bevinden. In de volgende tutorial zullen we een eenvoudige database maken, er verbinding mee maken en gegevens van deze bron ontvangen of verzenden. Hiervoor gebruiken we een op Windows Phone 7 gebaseerde Silverlight-toepassing en een NuSOAP-webservice. Laten we beginnen!


1. Installeer de software

Voordat we beginnen, moeten we de volgende programma's installeren:

  • Windows Phone 7.5 SDK
  • Silverlight 5 Toolkit
  • PHP Library voor het uitvoeren van de webservice (NuSOAP)

Het is duidelijk dat we ook een soort webhosting nodig hebben waar we een database kunnen maken. De meeste gratis hostingopties zijn genoeg voor ons, maar ze kunnen enkele beperkingen hebben die ik later in deze tutorial zal bespreken.

We hebben ook een FTP-client nodig. In deze tutorial gebruik ik een FireFTP-add-on voor Mozilla Firefox. Maar je kunt alles gebruiken wat je maar wilt.

Wanneer alle programma's zijn geïnstalleerd, kunnen we doorgaan.


2. Een externe database maken

Stap 1

Controleer om te beginnen of de host phpMyAdmin gebruikt omdat ik het in de voorbeelden gebruik. Maar als u ervoor kiest om iets anders te gebruiken, moeten alle opdrachten hetzelfde zijn.

Eerst moeten we een eenvoudige database maken, in ons geval zal deze slechts één tabel en drie attributen bevatten:

  • ID kaart - deze waarde identificeert het record. Het moet worden ingesteld als een autoincrement veld-.
  • Voornaam
  • Achternaam

De tabelnaam is MyUsers.

Om dit te doen, klikt u gewoon op "maak een tafel":

Stap 2

Vul daarna de cellen in zoals getoond in deze screenshot:

De tabelstructuur zou er nu als volgt uit moeten zien:

Stap 3

Bij deze stap moeten we een paar belangrijke punten opmerken:

  • Hostadres

Zoals ik eerder schreef, hebben gratis hostings limieten, een daarvan is om mogelijk alleen mee te verbinden localhost, onthoudt dat!

  • Database gebruiker

Onze gebruikersnaam om in te loggen in de database:

  • Database wachtwoord
  • Database naam

3. NuSOAP Server - Webservice starten

Stap 1

Het starten van onze webservice is heel eenvoudig:

Eerst moeten we enkele bestanden kopiëren naar de ftp-server. Ik raad een ftp-server aan omdat deze rechtstreeks is verbonden met onze hosting vanwege de localhost kwestie.

Zodra we verbonden zijn, moeten we het bestand nusoap.php kopiëren dat eerder is gedownload. We hebben ook een bestand nodig dat specifieke functies bevat die door ons zijn geschreven en die noodzakelijk zijn voor onze toepassing; Ik heb het gebeld MyService.php.

Stap 2

Nadat we de bestanden hebben gekopieerd, onze FTP root-directory moet er als volgt uitzien:

Open nu de MyService.php bestand en schrijf er in:

 configureWSDL ('MyService', 'urn: MyService'); // Tekencodering $ server-> soap_defencoding = 'utf-8'; // ------------------------------------------------ - // Registraties van onze functies // ----------------------------------------- -------- // Onze webservicefuncties zullen hier zijn. // ------------------------------------------------ - $ HTTP_RAW_POST_DATA = isset ($ HTTP_RAW_POST_DATA)? $ HTTP_RAW_POST_DATA: "; $ server-> service ($ HTTP_RAW_POST_DATA);?>

De belangrijkste punten worden uitgelegd in de bovenste commentaren op code.

Stap 3

Vanaf nu zou onze service moeten werken. We kunnen dit controleren door de webbrowser in te typen:

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

Als alles goed is gegaan, zou je zoiets als dit moeten zien:

Nadat we de webservice met succes hebben gestart, kunnen we naar de volgende stap gaan.


4. Webservicefuncties schrijven

In onze service hebben we twee functies nodig:

  • De eerste functie voegt gegevens toe aan de online database.
  • De tweede functie ontvangt er gegevens van.

Stap 1

Laten we openen MyService.php. We moeten de nieuwe functie registreren, hiervoor moeten we typen:

 $ server-> register ('InsertData', // Naam van functiearray ('FirstName' => 'xsd: string', 'LastName' => 'xsd: string'), // Invoerwaardenarray ('return' = > 'xsd: boolean'), // Uitgangswaarden 'urn: MyServicewsdl', // Namespace 'urn: MyServicewsdl # InsertData', // SoapAction 'rpc', // style 'literal', // kan worden gecodeerd maar het is werkt niet met silverlight 'Some_comments_about_function');

Vergeet niet dat het vóór de lichaamsfunctie en na de serverrichtlijnen moet worden geplaatst.

Hier is wat code-uitleg:

 'FirstName' => 'xsd: string'

"Voornaam" is de naam van variabele, "draad" is het type variabele (dat wil zeggen kan het zijn int, longint, boolean, enz.).

Wanneer de functie registreert, moeten we de hoofdtekst ervan schrijven. Hieronder is de code en uitleg:

 functie InsertData ($ Voornaam, $ Achternaam) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword")); if ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName ""); geef waar terug;  return false; 
 InsertData ($ Voornaam, $ Achternaam)

Dit is de naam van de functie en de bijbehorende kenmerken. Ze moeten hetzelfde zijn als in het registratiegedeelte.

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

Hier kunnen we de gegevens invoegen die we hebben opgemerkt toen we de database maakten.

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

En ook hier.

Daarna is het een eenvoudige MySQL-query die gegevens aan onze database toevoegt:

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

Stap 2

Nu is het tijd om de tweede functie te schrijven. De structuur zal vergelijkbaar zijn met de eerste.

Hier is de code van methode registratie:

 $ server-> register ('GetData', array ('ID' => 'xsd: int'), array ('return' => 'xsd: string'), 'urn: MyServicewsdl', 'urn: MyServicewsdl # GetData ',' rpc ',' literal ',' Enkele opmerkingen over functie 2 ');

De belangrijkste verschillen zijn in het gedeelte Input / Output values ​​(gewijzigde soorten variabelen).

Hier is de code van de lichaamsfunctie:

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

Hier is een kleine code uitleg:

 return $ result ['FirstName']. "-". $ result ['LastName'];

Deze regel geeft aan wat terug moet naar de Windows Phone-applicatie.

Stap 3

Na het schrijven van alle functies ziet het bestand MyService.php er als volgt uit:

 soap_defencoding = 'utf-8'; // ------------------------------------------------ - // Registreren InsertData-functie $ server-> registreren ('InsertData', array ('FirstName' => 'xsd: string', 'LastName' => 'xsd: string'), array ('return' => 'xsd : boolean '),' urn: MyServicewsdl ',' urn: MyServicewsdl # InsertData ',' rpc ',' literal ',' Some comments about function '); // Registreer GetData-functie $ server-> registreer ('GetData', array ('ID' => 'xsd: int'), array ('return' => 'xsd: string'), 'urn: MyServicewsdl', ' urn: MyServicewsdl # GetData ',' rpc ',' literal ',' Some comments about function 2 '); // ------------------------------------------------ - // Body InsterData-functiefunctie InsertData ($ Voornaam, $ Achternaam) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); if ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName ""); geef waar terug;  return false;  // Body GetData-functiefunctie GetData ($ ID) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); if ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) $ sql = "SELECT FirstName, LastName FROM MyUser WHERE ID = '$ ID'"; $ result = mysql_fetch_array (mysql_query ($ sql)); return $ result ['FirstName']. "-". $ result ['LastName'];  return false;  // ----------------------------------------------- - $ HTTP_RAW_POST_DATA = isset ($ HTTP_RAW_POST_DATA)? $ HTTP_RAW_POST_DATA: "; $ server-> service ($ HTTP_RAW_POST_DATA);?>

Om de functies te valideren, kunnen we opnieuw typen http://www.ourdomain.com/MyService.php in de browser. Nu zou de site er een beetje anders uit moeten zien, maar vergelijkbaar met deze:

Nu zijn we klaar om naar de volgende stap te gaan.


5. Een eenvoudige lay-out voor een Windows Phone-toepassing maken

Stap 1

Allereerst moeten we een Windows Phone-app maken. Laten we Microsoft Visual Studio voor Windows Phone 2010 uitvoeren. Klik nadat Visual Studio is gestart op "Bestand" en vervolgens op "Nieuw project". U zou een dialoogvenster moeten zien zoals in de onderstaande schermafbeelding:

Onze app gebruikt Silverlight, dus we moeten deze sjabloon controleren. We kunnen ook de projectnaam wijzigen, zoals localisaties, enz. In mijn geval is de projectnaam "MyApplication". Nadat u dit hebt gedaan, klikt u op de knop OK.

Stap 2

Op dit punt moeten we opmerken wat we nodig hebben in onze app. Wij hebben nodig:

  • Twee tekstvakken voor het verzenden van gegevens naar de database (Voornaam, Achternaam)
  • Eén tekstvak om de gegevens te ontvangen (ID)
  • Twee knoppen om onze acties goed te keuren

Het toevoegen van objecten (zoals knoppen) aan onze applicatie is eenvoudig, sleep het gewoon van "ToolBox" en zet het neer op een voorbeeld van de app. Houd er rekening mee dat je een vrije hand hebt bij het instellen van je eigen lay-out.

Dit is hoe het eruit ziet in mijn app:

Een ander belangrijk aspect zijn de namen van de elementen die in Visual Studio worden gebruikt (ze worden later in de code gebruikt).

Om het te wijzigen, klikt u gewoon op het element. In eigenschappen kun je tekst zien zoals "Tekstvak1", erop klikken en veranderen in iets dat je kunt onthouden, dat is cruciaal. Ik gebruikte deze namen voor mijn elementen:

  • "FirstNameBox", "LastNameBox" en "IdBox" voor tekstvakken
  • "SendBTN" en "ReadBTN" voor knoppen

Dat is alles wat we moeten doen in deze stap, we kunnen verder gaan.


6. Verbinding maken met Service

Om verbinding te maken met de webservice, moeten we met de rechtermuisknop klikken op "Referentie" in het dialoogvenster "Solution Explorer" en "Add Service Reference ..." selecteren

Hier hoe dit eruit ziet:

Daarna verschijnt een nieuw venster. Daarin moeten we het adres van onze webservice en de naam van de naamruimte schrijven.

In ons geval wordt een adres gemaakt, zoals in dit schema: http://www.ourdomain.com/MyService.php?wsdl.

Na het invoeren van een adres en het klikken op "Go" zou je zoiets als dit moeten zien:

Als u de bewerkingen genaamd "GetData" en "InsertData" ziet, betekent dit dat de verbinding met succes is gemaakt! Vergeet niet om namespace te typen, in mijn geval is dit "MyService". Klik nu op OK.


7. Schrijf Windows Phone-functies

We zijn bijna aan het einde van deze tutorial; we hoeven maar twee eenvoudige functies te schrijven.

Stap 1

De eerste functie bevindt zich achter de knop "Verzenden", dus dubbelklik erop. Nu moeten we bovenaan het bestand een "gebruik" -richtlijn van onze service toevoegen:

 gebruikmakend van MyApplication.MyService;

Laten we eens kijken naar de verzendfunctie achter de knop "Verzenden", nu is deze leeg:

 private void SendBTN_Click (object afzender, RoutedEventArgs e) 

Onze complete functie zou er als volgt uit moeten zien:

 private void SendBTN_Click (object afzender, RoutedEventArgs e) // Nieuw proxy-object van onze service maken MyServicePortTypeClient send = new MyServicePortTypeClient (); send.InsertDataCompleted + = nieuwe EventHandler(Send_InsertDataCompleted); // Oproepmethode, als parameters typen we tekst in FirstNameBox en LastNameBox // Deze gegevens worden verzonden naar webservice en later naar database send.InsertDataAsync (FirstNameBox.Text, LastNameBox.Text);  void send_InsertDataCompleted (object afzender, InsertDataCompletedEventArgs e) // Als onze server true retourneert, betekent dit dat we gegevens aan de database hebben toegevoegd ... if (e.Result) MessageBox.Show ("Successfully added!"); // ... als terugkeer false is, zijn we dat niet. else MessageBox.Show ("Er zijn enkele problemen opgetreden!"); 

De belangrijkste punten worden uitgelegd in de opmerkingen over de code, maar we moeten ons bewust zijn van het volgende:

Methode "send_InsertDataCompleted" wordt uitgevoerd wanneer we een antwoord van de server ontvangen. Deze functie staat ook niet in het "SendBTN" -object, deze staat buiten.

Nu is het tijd om ons werk te testen! Begin met debuggen en vul de vakjes in met wat gegevens. Hier heb ik John als voornaam ingevoerd en Doe als achternaam, toen klikte ik op Verzenden:

Laten we eens kijken hoe de database er nu uitziet:

Ja, het nieuwe record met ID = 1 is verschenen en alles gaat goed.

Stap 2

Nu hebben we de laatste functie voor ontvangen bereikt. Het is vergelijkbaar met de vorige methode. Dubbelklik op de knop "Lezen" en kopieer de code:

 private void ReadBTN_Click (object afzender, RoutedEventArgs e) // Nieuw proxy-object van onze service maken MyServicePortTypeClient read = new MyServicePortTypeClient (); read.GetDataCompleted + = nieuwe EventHandler(Read_GetDataCompleted); // Oproepmethode, als parameters typen we tekst in IdTextBox // maar we moeten teksttype van tekenreeks wijzigen in geheel getal (ID in webservice hebben integer type) read.GetDataAsync (Convert.ToInt32 (IdBox.Text));  void read_GetDataCompleted (object afzender, GetDataCompletedEventArgs e) MessageBox.Show (e.Result); 

Dit is hetzelfde proces als voorheen, "read_GetDataCompleted" wordt uitgevoerd nadat er gegevens uit de database zijn opgehaald. In deze methode gebruiken we een berichtvenster om ons resultaat, dat wil zeggen voor- en achternaam, te laten zien. Er is nog een stap te doen; we moeten het type tekst in IdBox wijzigen van tekenreeks naar geheel getal, omdat de variabele met de naam ID in de webservice een integer-type heeft. Om dit te doen heb ik een functie gebruikt genaamd "Convert.ToIn32 ()"


8. Testen

Nu kunnen we zien of dit werkt. Voer ID in "IdTextBox" in. Ik heb "1" ingevoerd en vervolgens op de knop "Lezen" geklikt.

Alles werkt! Onze applicatie is nu voltooid!


Conclusie

In deze zelfstudie hebben we een database gemaakt met behulp van een op Windows Phone 7 gebaseerde Silverlight-toepassing en de NuSOAP-webservice. Deze database is handig om gegevens te ontvangen of te verzenden. Externe databases zijn belangrijk omdat ze door veel mobiele applicaties worden gebruikt.