Connessione a un database esterno con NuSOAP

Molte applicazioni mobili utilizzano database esterni che si trovano in remoto su Internet. Nel seguente tutorial, creeremo un semplice database, ci colleghiamo ad esso e riceverai o invieremo dati da questa fonte. Per fare ciò utilizzeremo un'applicazione basata su Silverlight di Windows Phone 7 e un servizio Web NuSOAP. Cominciamo!


1. Installare il software

Prima di iniziare, è necessario installare i seguenti programmi:

  • Windows Phone 7.5 SDK
  • Silverlight 5 Toolkit
  • Libreria PHP per eseguire il servizio Web (NuSOAP)

Ovviamente, avremo anche bisogno di una sorta di web hosting in cui possiamo creare un database. La maggior parte delle opzioni di hosting gratuito sarà sufficiente per noi, ma potrebbero avere alcune limitazioni di cui parlerò più avanti in questo tutorial.

Abbiamo anche bisogno di un client FTP. In questo tutorial userò un componente aggiuntivo FireFTP per Mozilla Firefox. Ma puoi usare tutto ciò che vuoi.

Quando tutti i programmi sono installati, possiamo continuare.


2. Creazione di un database esterno

Passo 1

Per iniziare, controlla che l'hosting usi phpMyAdmin perché lo uso negli esempi. Ma se scegli di usare qualcos'altro tutti i comandi dovrebbero essere simili.

Per prima cosa dobbiamo creare un semplice database, nel nostro caso conterrà solo una tabella e tre attributi:

  • ID - questo valore identifica il record. Deve essere impostato come Incremento automatico campo.
  • Nome di battesimo
  • Cognome

Il nome della tabella è MyUsers.

Per fare ciò basta fare clic "crea tabella":

Passo 2

Dopo, riempire le celle come mostrato in questo screenshot:

La struttura della tabella dovrebbe ora assomigliare a questa:

Passaggio 3

In questa fase dobbiamo notare alcuni punti importanti:

  • Indirizzo dell'host

Come ho scritto in precedenza, gli hosting gratuiti hanno dei limiti, uno di questi è probabilmente connesso solo da localhost, ricordatelo!

  • Utente del database

Il nostro nome utente per accedere al database:

  • Password del database
  • Nome del database

3. NuSOAP Server - Avvio del servizio Web

Passo 1

Avviare il nostro servizio web è molto semplice:

Per prima cosa, dobbiamo copiare alcuni file sul server ftp. Raccomando un server ftp perché è collegato direttamente al nostro hosting a causa del localhost problema.

Una volta che siamo connessi, dobbiamo copiare il file nusoap.php che è stato scaricato in precedenza. Richiediamo inoltre un file che conterrà funzioni specifiche da noi scritte necessarie per la nostra applicazione; L'ho chiamato MyService.php.

Passo 2

Dopo aver copiato i file, il nostro FTP la root directory dovrebbe assomigliare all'immagine qui sotto:

Ora apri il MyService.php file e scrivici dentro:

 configureWSDL ('MyService', 'urn: MyService'); // Codifica dei caratteri $ server-> soap_defencoding = 'utf-8'; // ------------------------------------------------ - // Registrazioni delle nostre funzioni // ----------------------------------------- -------- // Le nostre funzioni di servizio web saranno qui. // ------------------------------------------------ - $ HTTP_RAW_POST_DATA = isset ($ HTTP_RAW_POST_DATA)? $ HTTP_RAW_POST_DATA: "; $ server-> servizio ($ HTTP_RAW_POST_DATA);?>

I punti più importanti sono spiegati nei commenti superiori al codice.

Passaggio 3

D'ora in poi il nostro servizio dovrebbe funzionare. Possiamo verificarlo digitando nel browser web:

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

Se tutto è andato bene dovresti vedere qualcosa del genere:

Dopo aver avviato correttamente il servizio Web, possiamo passare al passaggio successivo.


4. Scrittura delle funzioni del servizio Web

Nel nostro servizio abbiamo bisogno di due funzioni:

  • La prima funzione aggiunge dati al database online.
  • La seconda funzione riceve i dati da essa.

Passo 1

Apriamo MyService.php. Abbiamo bisogno di registrare la nuova funzione, per fare questo dovremmo digitare:

 $ server-> register ('InsertData', // Nome dell'array funzione ('FirstName' => 'xsd: string', 'LastName' => 'xsd: string'), // Array dei valori di input ('return' = > 'xsd: boolean'), // Output Values ​​'urn: MyServicewsdl', // Namespace 'urn: MyServicewsdl # InsertData', // SoapAction 'rpc', // style 'literal', // può essere codificato ma non funziona con silverlight 'Some_comments_about_function');

Ricorda che deve essere posizionato prima della funzione del corpo e dopo le direttive del server.

Ecco alcune spiegazioni sul codice:

 'FirstName' => 'xsd: string'

"Nome di battesimo" è il nome della variabile, "stringa" è il tipo di variabile (cioè può essere int, longint, booleano, eccetera.).

Quando la funzione si registra, dobbiamo scriverne il corpo. Di seguito è riportato il codice e la spiegazione:

 funzione InsertData ($ FirstName, $ LastName) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword")); if ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName ""); ritorna vero;  return false; 
 InsertData ($ FirstName, $ LastName)

Ecco il nome della funzione e i suoi attributi. Devono essere gli stessi della sezione di registrazione.

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

Qui possiamo inserire i dati che abbiamo notato quando abbiamo creato il database.

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

E anche qui.

Dopodiché è una semplice query MySQL che aggiunge dati al nostro database:

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

Passo 2

Ora è il momento di scrivere la seconda funzione. La struttura sarà simile alla prima.

Ecco il codice della registrazione del metodo:

 $ server-> register ('GetData', array ('ID' => 'xsd: int'), array ('return' => 'xsd: string'), 'urn: MyServicewsdl', 'urn: MyServicewsdl # GetData ',' rpc ',' literal ',' Alcuni commenti sulla funzione 2 ');

Le principali differenze sono nella sezione dei valori di Input / Output (tipi di variabili modificati).

Ecco il codice della funzione del corpo:

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

Ecco una piccola spiegazione del codice:

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

Questa riga indica cosa deve tornare all'applicazione Windows Phone.

Passaggio 3

Dopo aver scritto tutte le funzioni il file MyService.php dovrebbe apparire così:

 soap_defencoding = 'utf-8'; // ------------------------------------------------ - // Registra funzione InsertData $ server-> register ('InsertData', array ('FirstName' => 'xsd: string', 'LastName' => 'xsd: string'), array ('return' => 'xsd : boolean '),' urn: MyServicewsdl ',' urn: MyServicewsdl # InsertData ',' rpc ',' literal ',' Alcuni commenti sulla funzione '); // Registra la funzione GetData $ server-> register ('GetData', array ('ID' => 'xsd: int'), array ('return' => 'xsd: string'), 'urn: MyServicewsdl', ' urn: MyServicewsdl # GetData ',' rpc ',' literal ',' Alcuni commenti sulla funzione 2 '); // ------------------------------------------------ - // Funzione InsterData function InsertData ($ FirstName, $ LastName) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); if ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName ""); ritorna vero;  return false;  // Funzione funzione GetData Body GetData ($ ID) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); if ($ connect) if (mysql_select_db ("DatabaseName", $ connect)) $ sql = "SELEZIONA 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-> servizio ($ HTTP_RAW_POST_DATA);?>

Per validare le funzioni possiamo nuovamente digitare http://www.ourdomain.com/MyService.php nel browser. Ora il sito dovrebbe apparire un po 'diverso, ma simile a questo:

Ora siamo pronti per andare al prossimo passo.


5. Creazione di un layout semplice per un'applicazione Windows Phone

Passo 1

Innanzitutto, dobbiamo creare un'app di Windows Phone. Eseguiamo Microsoft Visual Studio per Windows Phone 2010. Dopo l'avvio di Visual Studio, fai clic su "File" quindi su "Nuovo progetto". Dovresti vedere una finestra di dialogo come nello screenshot qui sotto:

La nostra app utilizzerà Silverlight, quindi dobbiamo controllare questo modello. Possiamo anche cambiare il nome del progetto, come le localizzazioni, ecc. Nel mio caso, il nome del progetto è "MyApplication". Dopo averlo fatto, fai clic sul pulsante OK.

Passo 2

A questo punto dobbiamo notare ciò di cui abbiamo bisogno nella nostra app. Abbiamo bisogno:

  • Due caselle di testo per l'invio di dati al database (Nome, Cognome)
  • Una casella di testo per ricevere i dati (ID)
  • Due pulsanti per approvare le nostre azioni

Aggiungere oggetti (come i pulsanti) alla nostra applicazione è facile, basta trascinarlo da "ToolBox" e rilasciarlo nell'anteprima dell'app. Tieni presente che hai mano libera nell'impostare il tuo layout.

Ecco come appare sulla mia app:

Un altro aspetto importante sono i nomi degli elementi utilizzati in Visual Studio (vengono utilizzati successivamente nel codice).

Per cambiarlo, basta cliccare sull'elemento. Quindi nelle proprietà puoi vedere un testo come "Textbox1", cliccarci sopra e cambiarlo in qualcosa che puoi ricordare, che è cruciale. Ho usato questi nomi per i miei elementi:

  • "FirstNameBox", "LastNameBox" e "IdBox" per le caselle di testo
  • "SendBTN" e "ReadBTN" per i pulsanti

Questo è tutto ciò che dobbiamo fare in questo passaggio, possiamo andare avanti.


6. Connessione al servizio

Per connettersi al servizio web dobbiamo fare clic destro su "Riferimento" nella finestra di dialogo "Esplora soluzioni" e selezionare "Aggiungi riferimento servizio ..."

Ecco come appare:

Successivamente verrà visualizzata una nuova finestra. In esso dobbiamo scrivere l'indirizzo del nostro servizio web e il nome del namespace.

Nel nostro caso verrà creato un indirizzo, come in questo schema: http://www.ourdomain.com/MyService.php?wsdl.

Dopo aver inserito un indirizzo e facendo clic su "Vai" dovresti vedere qualcosa di simile a questo:

Se vedi le operazioni chiamate "GetData" e "InsertData" significa che la connessione è stata creata correttamente! Ricordati di digitare namespace, nel mio caso è "MyService". Ora fai clic su OK.


7. Scrivere le funzioni di Windows Phone

Siamo quasi alla fine di questo tutorial; abbiamo solo bisogno di scrivere due semplici funzioni.

Passo 1

La prima funzione sarà dietro il pulsante "Invia", quindi fai doppio clic su di esso. Ora dobbiamo aggiungere in cima al file una direttiva "using" del nostro servizio:

 utilizzando MyApplication.MyService;

Diamo un'occhiata alla funzione di invio dietro il pulsante "Invia", ora è vuota:

 private void SendBTN_Click (mittente dell'oggetto, RoutedEventArgs e) 

La nostra funzione completa dovrebbe assomigliare a questa:

 private void SendBTN_Click (mittente dell'oggetto, RoutedEventArgs e) // Creazione di un nuovo oggetto proxy del nostro servizio MyServicePortTypeClient send = new MyServicePortTypeClient (); send.InsertDataCompleted + = new EventHandler(Send_InsertDataCompleted); // Metodo di chiamata, come parametro scriviamo il testo contenuto in FirstNameBox e LastNameBox // Questi dati saranno inviati al servizio web e successivamente al database send.InsertDataAsync (FirstNameBox.Text, LastNameBox.Text);  void send_InsertDataCompleted (mittente dell'oggetto, InsertDataCompletedEventArgs e) // Se il nostro server restituisce true, significa che vengono aggiunti dati al database ... if (e.Result) MessageBox.Show ("Aggiunti con successo!"); // ... se restituisci false non lo siamo. else MessageBox.Show ("Alcuni problemi si sono verificati!"); 

I punti più importanti sono spiegati nei commenti del codice, ma dobbiamo essere consapevoli di quanto segue:

Il metodo "send_InsertDataCompleted" viene eseguito quando otteniamo una risposta dal server. Anche questa funzione non è nell'oggetto "SendBTN", è all'esterno.

Ora è il momento di testare il nostro lavoro! Iniziare a eseguire il debug e compilare le caselle con alcuni dati. Qui ho inserito John come nome e Doe come cognome, quindi ho fatto clic su Invia:

Vediamo ora come appare il database:

Sì, il nuovo record con ID = 1 è apparso e tutto sta andando bene.

Passo 2

Ora abbiamo raggiunto la funzione finale per la ricezione. È simile al metodo precedente. Fare doppio clic sul pulsante "Leggi" e copiare il codice:

 privato vuoto ReadBTN_Click (oggetto mittente, RoutedEventArgs e) // Creazione nuovo oggetto proxy del nostro servizio MyServicePortTypeClient read = new MyServicePortTypeClient (); read.GetDataCompleted + = new EventHandler(Read_GetDataCompleted); // Metodo di chiamata, come parametri scriviamo il testo contenuto in IdTextBox // ma dobbiamo cambiare il tipo di testo di stringa in intero (l'ID nel servizio web ha il tipo intero) read.GetDataAsync (Convert.ToInt32 (IdBox.Text));  void read_GetDataCompleted (mittente dell'oggetto, GetDataCompletedEventArgs e) MessageBox.Show (e.Result); 

Questo è lo stesso processo di prima, "read_GetDataCompleted" viene eseguito dopo aver ottenuto i dati dal database. In questo metodo utilizzeremo una finestra di messaggio per mostrare il nostro risultato, ovvero il nome e il cognome. C'è ancora un passo da fare; abbiamo bisogno di cambiare il tipo di testo in IdBox da stringa a intero perché la variabile chiamata ID nel servizio web ha un tipo intero. Per fare questo ho usato una funzione chiamata "Convert.ToIn32 ()"


8. Test

Ora possiamo vedere se funziona. Inserisci l'ID in "IdTextBox". Ho inserito "1", quindi ho fatto clic sul pulsante "Leggi".

Tutto funziona! La nostra applicazione è ora completa!


Conclusione

In questo tutorial abbiamo creato un database utilizzando un'applicazione basata su Silverlight di Windows Phone 7 e il servizio Web NuSOAP. Questo database è utile per ricevere o inviare dati. I database esterni sono importanti perché sono utilizzati da molte applicazioni mobili.