Conectarea la o bază de date externă cu NuSOAP

Multe aplicații mobile folosesc baze de date externe care sunt localizate la distanță de pe Internet. În următorul tutorial, vom crea o bază de date simplă, vom conecta la ea și vom primi sau trimite date din această sursă. Pentru aceasta, vom folosi o aplicație Windows Phone 7 Silverlight și un serviciu web NuSOAP. Sa incepem!


1. Instalați software-ul

Înainte de a începe, trebuie să instalați următoarele programe:

  • Windows Phone 7.5 SDK
  • Setul de instrumente Silverlight 5
  • PHP Library pentru a rula serviciul web (NuSOAP)

Evident, vom avea nevoie de un fel de gazduire web unde putem crea o baza de date. Majoritatea opțiunilor de găzduire gratuite vor fi suficiente pentru noi, dar pot avea niște limitări pe care le voi discuta mai târziu în acest tutorial.

Avem de asemenea nevoie de un client FTP. În acest tutorial voi folosi un FireFTP add-on la Mozilla Firefox. Dar poți folosi tot ce vrei.

Când toate programele sunt instalate, putem continua.


2. Crearea unei baze de date externe

Pasul 1

Pentru a începe, verificați dacă găzduirea folosește phpMyAdmin pentru că o folosesc în exemple. Dar dacă alegeți să utilizați altceva, toate comenzile ar trebui să fie similare.

Mai întâi trebuie să creăm o bază de date simplă, în cazul nostru va conține doar un singur tabel și trei atribute:

  • ID-ul - această valoare identifică înregistrarea. Trebuie să fie setat ca un increment auto camp.
  • Nume
  • Numele de familie

Numele tabelului este MyUsers.

Pentru a face acest lucru, faceți clic pe "crea masa":

Pasul 2

După aceea, completați celulele așa cum se arată în această captură de ecran:

Structura tabelului ar trebui să arate astfel:

Pasul 3

La acest pas trebuie să remarcăm câteva puncte importante:

  • Adresa gazdă

Așa cum am scris mai devreme, hostările libere au limite, una dintre ele este de a se conecta numai de la gazdă locală, sa nu uiti asta!

  • Utilizatorul bazei de date

Numele de utilizator pentru a vă conecta la baza de date:

  • Parola de bază de date
  • Numele bazei de date

3. Serverul NuSOAP - pornirea serviciului Web

Pasul 1

Pornirea serviciului nostru web este foarte simplă:

În primul rând, trebuie să copiem câteva fișiere pe serverul ftp. Vă recomandăm un server ftp deoarece este conectat direct la găzduirea noastră datorită gazdă locală problema.

Odată ce suntem conectați, trebuie să copiem fișierul nusoap.php care a fost descărcat mai devreme. De asemenea, avem nevoie de un fișier care să conțină anumite funcții scrise de noi care sunt necesare pentru aplicarea noastră; L-am sunat MyService.php.

Pasul 2

După ce copiem fișierele noastre FTP directorul rădăcină ar trebui să arate ca imaginea de mai jos:

Deschide acum MyService.php scrieți și scrieți-l:

 configureWSDL ("MyService", "urn: MyService"); // Codificarea caracterelor $ server-> soap_defencoding = 'utf-8'; // ------------------------------------------------ - // Înregistrarea funcțiilor noastre // ----------------------------------------- -------- // Funcțiile noastre de serviciu web vor fi aici. // ------------------------------------------------ - $ HTTP_RAW_POST_DATA = isset ($ HTTP_RAW_POST_DATA)? $ HTTP_RAW_POST_DATA: "; $ server-> serviciu ($ HTTP_RAW_POST_DATA);?>

Cele mai importante puncte sunt explicate în comentariile superioare la cod.

Pasul 3

De acum încolo, serviciul nostru ar trebui să funcționeze. Putem verifica acest lucru tastând în browser-ul web:

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

Dacă totul a mers bine ar trebui să vezi ceva de genul:

După ce am pornit cu succes serviciul web, putem trece la pasul următor.


4. Scrierea funcțiilor Web Service

În serviciul nostru avem nevoie de două funcții:

  • Prima funcție adaugă date la baza de date online.
  • A doua funcție primește date din acesta.

Pasul 1

Să ne deschidem MyService.php. Trebuie să înregistrăm noua funcție, pentru a face acest lucru ar trebui să tastăm:

 $ server-> register ('InsertData', // Numele arrayului de funcții ('FirstName' => 'xsd: string', 'LastName' => 'xsd: > 'xsd: boolean'), // Valori de ieșire urn: MyServicewsdl ', // Namespace' urn: MyServicewsdl # InsertData ', // SoapAction' rpc ', // stil' literal ', // poate fi codificat nu funcționează cu silverlight 'Some_comments_about_function');

Amintiți-vă că trebuie să fie plasat în fața funcției organismului și după directivele serverului.

Iată câteva explicații ale codului:

 'FirstName' => 'xsd: string'

"Nume" este numele variabilei, "şir" este tipul de variabilă (adică poate fi int, longint, boolean, etc).

Când funcția se înregistrează, trebuie să scriem corpul acesteia. Mai jos este codul și explicația:

 funcția InsertData ($ FirstName, $ LastName) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword")); dacă $ connect) if (mysql_select_db ("DatabaseName", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName "); return true;  return false; 
 InsertData ($ FirstName, $ LastName)

Iată numele funcției și atributele acesteia. Acestea trebuie să fie aceleași ca în secțiunea de înregistrare.

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

Aici putem introduce datele pe care le-am observat când am creat baza de date.

 dacă mysql_select_db ("DatabaseName", $ connect)) 

Și aici.

Apoi este o interogare simplă MySQL care adaugă date în baza noastră de date:

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

Pasul 2

Acum este momentul să scrieți a doua funcție. Structura va fi similară cu prima.

Iată codul de înregistrare a metodei:

 $ server-> înregistrare ('GetData', array ('ID' => 'xsd: int'), array ('return' => 'xsd: string'), urn: MyServicewsdl ', urn: MyServicewsdl # GetData ',' rpc ',' literal ',' Câteva comentarii despre funcția 2 ');

Principalele diferențe sunt în secțiunea Valori intrare / ieșire (tipuri de variabile modificate).

Iată codul funcției corporale:

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

Iată câteva explicații despre cod:

 retur $ rezultat ['FirstName']. "-" $ result ['LastName'];

Această linie afirmă ce trebuie să se întoarcă la aplicația Windows Phone.

Pasul 3

După scrierea tuturor funcțiilor, fișierul MyService.php ar trebui să arate astfel:

 soap_defencoding = 'utf-8'; // ------------------------------------------------ - // Înregistrați funcția InsertData $ server-> register ('InsertData', array ('FirstName' => 'xsd: string', 'LastName' => 'xsd: string') : boolean ',' urn: MyServicewsdl ',' urn: MyServicewsdl # InsertData ',' rpc ',' literal ',' Câteva comentarii despre funcție '); // Inregistreaza GetData functionare $ server-> register ('GetData', array ('ID' => 'xsd: int'), array (return '=>' xsd: string '),' urn: MyServicewsdl ' urn: MyServicewsdl # GetData ',' rpc ',' literal ',' Câteva comentarii despre funcția 2 '); // ------------------------------------------------ - // Funcția Funcția Body InsterData InsertData ($ FirstName, $ LastName) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); dacă $ connect) if (mysql_select_db ("DatabaseName", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName "); return true;  return false;  // funcția Funcția GetData a corpului GetData ($ ID) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); dacă ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) $ sql = "SELECT FirstName, LastName FROM MyUser WHERE ID = '$ ID'"; $ result = mysql_fetch_array (mysql_query ($ sql)); retur $ rezultat ['FirstName']. "-" $ result ['LastName'];  return false;  // ----------------------------------------------- - $ HTTP_RAW_POST_DATA = isset ($ HTTP_RAW_POST_DATA)? $ HTTP_RAW_POST_DATA: "; $ server-> serviciu ($ HTTP_RAW_POST_DATA);?>

Pentru a valida funcțiile pe care le putem tasta din nou http://www.ourdomain.com/MyService.php în browser. Acum, site-ul ar trebui să arate puțin diferit, dar similar cu acesta:

Acum suntem gata să mergem la următorul pas.


5. Crearea unui aspect simplu pentru o aplicație Windows Phone

Pasul 1

În primul rând, trebuie să creați o aplicație Windows Phone. Să rulați Microsoft Visual Studio pentru Windows Phone 2010. După ce pornește Visual Studio, faceți clic pe "File" apoi pe "New Project". Ar trebui să vedeți o fereastră de dialog ca în ecranul de mai jos:

Aplicația noastră va utiliza Silverlight, așa că trebuie să verificăm acest șablon. De asemenea, putem schimba denumirea proiectului, precum localitățile etc. În cazul meu, numele proiectului este "MyApplication". După ce ați făcut acest lucru, faceți clic pe butonul OK.

Pasul 2

În acest moment, trebuie să observăm ce avem nevoie în aplicația noastră. Avem nevoie:

  • Două casete text pentru trimiterea datelor către baza de date (Prenume, Nume)
  • O casetă de text pentru a primi datele (ID)
  • Două butoane pentru aprobarea acțiunilor noastre

Adăugarea de obiecte (cum ar fi butoanele) în aplicația noastră este ușoară, doar trageți-o din "ToolBox" și plasați-o în previzualizarea aplicației. Rețineți că aveți o mână liberă în stabilirea propriului aspect.

Așa arată în aplicația mea:

Un alt aspect important este numele elementelor utilizate în Visual Studio (acestea sunt folosite ulterior în cod).

Pentru ao schimba, faceți clic pe element. Apoi, în proprietăți puteți vedea text ca "Textbox1", faceți clic pe el și schimbați-l la ceva pe care îl puteți aminti, care este crucial. Am folosit aceste nume pentru elementele mele:

  • "FirstNameBox", "LastNameBox" și "IdBox" pentru casetele de text
  • "SendBTN" și "ReadBTN" pentru butoane

Asta e tot ce trebuie să facem în acest pas, putem trece mai departe.


6. Conectarea la serviciu

Pentru a vă conecta la serviciul web, trebuie să faceți clic dreapta pe "Referință" din caseta de dialog "Solution Explorer" și să selectați "Add Service Reference ..."

Cum arată acest lucru:

Apoi va apărea o nouă fereastră. În acesta trebuie să scriem adresa serviciului nostru web și numele spațiului de nume.

În cazul nostru, va fi creată o adresă, ca și în cazul acestei scheme: http://www.ourdomain.com/MyService.php?wsdl.

După ce introduceți o adresă și faceți clic pe "Mergeți", ar trebui să vedeți ceva de genul:

Dacă vedeți operațiile numite "GetData" și "InsertData" înseamnă că conexiunea a fost creată cu succes! Amintiți-vă să introduceți spațiu de nume, în cazul meu este "MyService". Faceți clic pe OK.


7. Scrierea funcțiilor telefonului Windows

Suntem aproape la sfârșitul acestui tutorial; trebuie doar să scriem două funcții simple.

Pasul 1

Prima funcție va fi în spatele butonului "Trimitere", deci faceți dublu clic pe el. Acum trebuie să adăugăm în partea de sus a dosarului o directivă "de folosire" a serviciului nostru:

 utilizând MyApplication.MyService;

Să ne uităm la funcția de trimitere din spatele butonului "Trimite", acum este gol:

 privat privat SendBTN_Click (expeditor obiect, RoutedEventArgs e) 

Funcția noastră completă ar trebui să arate astfel:

 private void SendBTN_Click (expeditor obiect, RoutedEventArgs e) // Crearea unui nou obiect proxy al serviciului nostru MyServicePortTypeClient send = new MyServicePortTypeClient (); send.InsertDataCompleted + = nou EventHandler(Send_InsertDataCompleted); // Metoda de apelare, ca parametri introducem textul conținut în FirstNameBox și LastNameBox // Aceste date vor fi trimise către serviciul web și mai târziu către baza de date send.InsertDataAsync (FirstNameBox.Text, LastNameBox.Text);  void send_InsertDataCompleted (expeditor obiect, InsertDataCompletedEventArgs e) // Dacă serverul nostru se întoarce adevărat, înseamnă că suntem adăugați date la baza de date ... dacă (e.Result) MessageBox.Show ("A fost adăugat cu succes!"); // ... dacă return false, nu suntem. altceva MessageBox.Show ("Au apărut unele probleme!"); 

Cele mai importante puncte sunt explicate în comentariile codului, dar trebuie să fim conștienți de următoarele:

Metoda "send_InsertDataCompleted" se execută atunci când primim un răspuns de la server. De asemenea, această funcție nu se află în obiectul "SendBTN", este afară.

Acum este momentul să ne testați munca! Începeți să depanați și completați casetele cu unele date. Aici am intrat în numele lui Ioan și Doe ca nume de familie, apoi am făcut clic pe Trimiteți:

Să vedem cum arată acum baza de date:

Da, noua înregistrare cu ID = 1 a apărut și totul merge bine.

Pasul 2

Acum am ajuns la funcția finală de primire. Este similară cu metoda anterioară. Faceți dublu clic pe butonul "Citire" și copiați codul:

 void privat ReadBTN_Click (expeditor obiect, RoutedEventArgs e) // Crearea unui obiect proxy nou al serviciului nostru MyServicePortTypeClient read = new MyServicePortTypeClient (); read.GetDataCompleted + = nou EventHandler(Read_GetDataCompleted); // Metoda de apelare, ca parametru introducem textul conținut în IdTextBox // dar trebuie să schimbăm textul de tip șir la întreg (ID în serviciul web are tip integer) read.GetDataAsync (Convert.ToInt32 (IdBox.Text));  void read_GetDataCompleted (expeditor obiect, GetDataCompletedEventArgs e) MessageBox.Show (e.Result); 

Acesta este același proces ca înainte, "read_GetDataCompleted" se execută după obținerea datelor din baza de date. În această metodă vom folosi o casetă de mesaj pentru a afișa rezultatul nostru, adică numele și prenumele. Mai trebuie făcut încă un pas; trebuie să modificăm tipul de text din IdBox de la șir la întreg, deoarece variabila denumită ID în serviciul web are un tip întreg. Pentru a face acest lucru am folosit o funcție numită "Convert.ToIn32 ()"


8. Testarea

Acum vedem dacă funcționează. Introduceți ID-ul în "IdTextBox". Am intrat "1", apoi am dat click pe butonul "Read".

Totul funcționează! Aplicația noastră este acum completă!


Concluzie

În acest tutorial am creat o bază de date utilizând o aplicație Windows Phone 7 Silverlight și un serviciu web NuSOAP. Această bază de date este utilă pentru a primi sau trimite date. Bazele de date externe sunt importante deoarece sunt utilizate de multe aplicații mobile.

Cod