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!
Înainte de a începe, trebuie să instalați următoarele programe:
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.
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:
Numele tabelului este MyUsers.
Pentru a face acest lucru, faceți clic pe "crea masa":
După aceea, completați celulele așa cum se arată în această captură de ecran:
Structura tabelului ar trebui să arate astfel:
La acest pas trebuie să remarcăm câteva puncte importante:
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!
Numele de utilizator pentru a vă conecta la baza de date:
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.
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.
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.
În serviciul nostru avem nevoie de două funcții:
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 "");
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.
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.
Î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.
În acest moment, trebuie să observăm ce avem nevoie în aplicația noastră. Avem nevoie:
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:
Asta e tot ce trebuie să facem în acest pas, putem trece mai departe.
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.
Suntem aproape la sfârșitul acestui tutorial; trebuie doar să scriem două funcții simple.
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.
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 ()"
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ă!
Î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.