De nombreuses applications mobiles utilisent des bases de données externes situées à distance sur Internet. Dans le didacticiel suivant, nous allons créer une base de données simple, nous y connecter et recevoir ou envoyer des données à partir de cette source. Pour ce faire, nous utiliserons une application Windows Phone 7 basée sur Silverlight et un service Web NuSOAP. Commençons!
Avant de commencer, nous devons installer les programmes suivants:
De toute évidence, nous aurons également besoin d’une sorte d’hébergement Web pour créer une base de données. La plupart des options d'hébergement gratuites nous suffiront, mais elles peuvent avoir certaines limitations dont je parlerai plus loin dans ce tutoriel..
Nous avons également besoin d'un client FTP. Dans ce tutoriel, je vais utiliser un add-on FireFTP pour Mozilla Firefox. Mais vous pouvez utiliser ce que vous voulez.
Quand tous les programmes sont installés, on peut continuer.
Pour commencer, vérifiez que l'hébergement utilise phpMyAdmin car je l'utilise dans les exemples. Mais si vous choisissez d’utiliser autre chose, toutes les commandes doivent être similaires..
Nous devons d’abord créer une base de données simple. Dans notre cas, elle ne contiendra qu’une table et trois attributs:
Le nom de la table est Mes utilisateurs.
Pour ce faire, cliquez simplement sur "créer une table":
Après cela, remplissez les cellules comme indiqué dans cette capture d'écran:
La structure de la table devrait maintenant ressembler à ceci:
À ce stade, nous devons noter quelques points importants:
Comme je l'ai écrit plus tôt, les hébergements gratuits ont des limites, l'une d'elles étant de ne se connecter que localhost, souviens toi que!
Notre nom d'utilisateur pour vous connecter à la base de données:
Démarrer notre service Web est très simple:
Premièrement, nous devons copier certains fichiers sur le serveur FTP. Je recommande un serveur ftp car il est directement connecté à notre hébergement à cause de la localhost problème.
Une fois que nous sommes connectés, nous devons copier le fichier nusoap.php qui a été téléchargé plus tôt. Nous avons également besoin d’un fichier qui contiendra des fonctions spécifiques écrites par nous et nécessaires à notre application; Je l'ai appelé MyService.php.
Après avoir copié les fichiers, notre FTP Le répertoire racine devrait ressembler à l'image ci-dessous:
Maintenant ouvrez le MyService.php déposer et écrire dedans:
configureWSDL ('MyService', 'urn: MyService'); // Encodage des caractères $ server-> soap_defencoding = 'utf-8'; // ---------------------------------------------------- - // Inscriptions de nos fonctions // --------------------------------------------- -------- // Nos fonctions de service Web seront ici. // ---------------------------------------------------- - $ HTTP_RAW_POST_DATA = isset ($ HTTP_RAW_POST_DATA)? $ HTTP_RAW_POST_DATA: "; $ serveur-> service ($ HTTP_RAW_POST_DATA);?>
Les points les plus importants sont expliqués dans les commentaires supérieurs à coder.
A partir de maintenant, notre service devrait fonctionner. Nous pouvons vérifier cela en tapant dans le navigateur Web:
http://www.ourdomain.com/MyService.php
Si tout se passe bien, vous devriez voir quelque chose comme ceci:
Une fois le service Web lancé avec succès, nous pouvons passer à l'étape suivante..
Dans notre service, nous avons besoin de deux fonctions:
Ouvrons MyService.php. Nous devons enregistrer la nouvelle fonction. Pour ce faire, nous devons taper:
$ server-> register ('InsertData', // Nom du tableau de fonctions ('FirstName' => 'xsd: string', 'LastName' => 'xsd: string'), // Tableau des valeurs d'entrée ('return' = > 'xsd: boolean'), // Valeurs de sortie 'urn: MyServicewsdl', // Espace de noms 'urn: MyServicewsdl # InsertData', // SoapAction 'rpc', // style 'literal', // peut être codé mais ne fonctionne pas avec silverlight 'Some_comments_about_function');
N'oubliez pas qu'il doit être placé avant la fonction body et après les directives du serveur.
Voici quelques explications de code:
'FirstName' => 'xsd: string'
"Prénom" est le nom de la variable, "chaîne" est le type de variable (c'est-à-dire qu'il peut être int, longint, boolean, etc.).
Lorsque la fonction s'inscrit, nous devons en écrire le corps. Ci-dessous le code et l'explication:
function InsertData ($ FirstName, $ LastName) $ connect = mysql_pconnect ("Host", "Nom d'utilisateur", "UserPassword")); if ($ connect) if (mysql_select_db ("Nom de la base de données", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName ""); retourne vrai; return false;
InsertData ($ Prénom, $ Nom)
Voici le nom de la fonction et ses attributs. Ils doivent être les mêmes que dans la section inscription.
$ connect = mysql_pconnect ("Host", "UserName", "UserPassword");
Ici, nous pouvons insérer les données que nous avons remarquées lors de la création de la base de données..
if (mysql_select_db ("DatabaseName", $ connect))
Et aussi ici.
Après cela, c’est une simple requête MySQL qui ajoute des données à notre base de données:
mysql_query ("INSERT INTO MyUser SET FistName =" $ Prénom ", Nom =" $ Nom "");
Maintenant il est temps d'écrire la deuxième fonction. La structure sera semblable à la première.
Voici le code d'enregistrement de la méthode:
$ server-> register ('GetData', array ('ID' => 'xsd: int'), array ('return' => 'xsd: string'), 'urn: MyServicewsdl', 'urn: MyServicewsdl # GetData ',' rpc ',' littéral ',' Quelques commentaires sur la fonction 2 ');
Les principales différences se trouvent dans la section Valeurs d’entrée / sortie (types de variables modifiés).
Voici le code de fonction du corps:
function GetData ($ ID) $ connect = mysql_pconnect ("Hôte", "Nom d'utilisateur", "UserPassword"); if ($ connect) if (mysql_select_db ("Nom de la base de données", $ connect)) $ sql = "SELECT Prénom, Nom de famille FROM MyUser WHERE ID = '$ ID'"; $ result = mysql_fetch_array (mysql_query ($ sql)); return $ result ['FirstName']. "-". $ result ['LastName']; return false;
Voici une petite explication de code:
return $ result ['FirstName']. "-". $ result ['LastName'];
Cette ligne indique ce qui doit retourner à l'application Windows Phone.
Après avoir écrit toutes les fonctions, le fichier MyService.php devrait ressembler à ceci:
soap_defencoding = 'utf-8'; // ---------------------------------------------------- - // Register, fonction InsertData $ serveur-> register ('InsertData', array ('FirstName' => 'xsd: string', 'LastName' => 'xsd: string'), array ('return' => 'xsd : boolean '),' urn: MyServicewsdl ',' urn: MyServicewsdl # InsertData ',' rpc ',' literal ',' Quelques commentaires sur la fonction '); // Register Fonction GetData $ server-> register ('GetData', array ('ID' => 'xsd: int'), array ('return' => 'xsd: string'), 'urn: MyServicewsdl', ' urn: MyServicewsdl # GetData ',' rpc ',' literal ',' Quelques commentaires sur la fonction 2 '); // ---------------------------------------------------- - // Fonction Body InsterData function InsertData ($ FirstName, $ LastName) $ connect = mysql_pconnect ("Host", "UserName", "UserPassword"); if ($ connect) if (mysql_select_db ("Nom de la base de données", $ connect)) mysql_query ("INSERT INTO MyUser SET FirstName =" $ FirstName ", LastName =" $ LastName ""); retourne vrai; return false; // Body Fonction GetData fonction GetData ($ ID) $ connect = mysql_pconnect ("Host", "Nom d'utilisateur", "UserPassword"); if ($ connect) if (mysql_select_db ("Nom de la base de données", $ connect)) $ sql = "SELECT Prénom, Nom de famille 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: "; $ serveur-> service ($ HTTP_RAW_POST_DATA);?>
Pour valider les fonctions on peut encore taper http://www.ourdomain.com/MyService.php dans le navigateur. Maintenant, le site devrait être un peu différent, mais semblable à ceci:
Maintenant nous sommes prêts à passer à l'étape suivante.
Tout d'abord, nous devons créer une application Windows Phone. Exécutons Microsoft Visual Studio pour Windows Phone 2010. Une fois Visual Studio démarré, cliquez sur "Fichier", puis sur "Nouveau projet". Vous devriez voir une fenêtre de dialogue comme dans la capture d'écran ci-dessous:
Notre application utilisera Silverlight, nous devons donc vérifier ce modèle. Nous pouvons également changer le nom du projet, comme des localisations, etc. Dans mon cas, le nom du projet est "MyApplication". Ensuite, cliquez sur le bouton OK..
À ce stade, nous devons noter ce dont nous avons besoin dans notre application. Nous avons besoin:
Ajouter des objets (tels que des boutons) à notre application est facile, il suffit de le faire glisser de "ToolBox" et de le déposer sur un aperçu de l'application. Gardez à l'esprit que vous avez les mains libres pour définir votre propre mise en page..
Voici à quoi ça ressemble sur mon application:
Un autre aspect important est le nom des éléments utilisés dans Visual Studio (ils sont utilisés plus tard dans le code)..
Pour le changer, il suffit de cliquer sur l'élément. Ensuite, dans les propriétés, vous pouvez voir du texte comme "Textbox1", cliquer dessus et le changer pour quelque chose dont vous pouvez vous souvenir, qui est crucial. J'ai utilisé ces noms pour mes éléments:
C'est tout ce que nous devons faire dans cette étape, nous pouvons passer à autre chose.
Pour vous connecter au service Web, vous devez cliquer avec le bouton droit de la souris sur "Référence" dans la boîte de dialogue "Explorateur de solutions" et sélectionner "Ajouter une référence de service ...".
Voici à quoi ça ressemble:
Après cela, une nouvelle fenêtre apparaîtra. Nous devons y écrire l'adresse de notre service Web et le nom de l'espace de noms..
Dans notre cas, une adresse sera créée, comme sur ce schéma: http://www.ourdomain.com/MyService.php?wsdl.
Après avoir entré une adresse et cliqué sur "Go", vous devriez voir quelque chose comme ceci:
Si vous voyez les opérations appelées "GetData" et "InsertData", cela signifie que la connexion a été créée avec succès! N'oubliez pas de taper namespace, dans mon cas c'est "MyService". Maintenant, cliquez sur OK.
Nous sommes presque à la fin de ce tutoriel; il suffit d'écrire deux fonctions simples.
La première fonction sera derrière le bouton "Envoyer", alors double-cliquez dessus. Nous devons maintenant ajouter en haut du fichier une directive "using" de notre service:
using MyApplication.MyService;
Regardons la fonction d'envoi derrière le bouton "Envoyer", maintenant elle est vide:
void privé SendBTN_Click (expéditeur d'objet, RoutedEventArgs e)
Notre fonction complète devrait ressembler à ceci:
void privé SendBTN_Click (expéditeur d'objet, RoutedEventArgs e) // Création d'un nouvel objet proxy de notre service MyServicePortTypeClient send = new MyServicePortTypeClient (); send.InsertDataCompleted + = new EventHandler(send_InsertDataCompleted); // Méthode d'appel, en tant que paramètres, nous tapons le texte contenu dans FirstNameBox et LastNameBox // Ces données seront envoyées au service Web et ultérieurement à la base de données send.InsertDataAsync (FirstNameBox.Text, LastNameBox.Text); void send_InsertDataCompleted (expéditeur d'objet, InsertDataCompletedEventArgs e) // Si notre serveur renvoie True, cela signifie que nous avons ajouté des données à la base de données… if (e.Result) MessageBox.Show ("ajouté avec succès!"); //… si false, nous ne le sommes pas. else MessageBox.Show ("Certains problèmes sont survenus!");
Les points les plus importants sont expliqués dans les commentaires du code, mais nous devons être conscients de ce qui suit:
La méthode "send_InsertDataCompleted" est exécutée lorsque nous recevons une réponse du serveur. De plus, cette fonction n’est pas dans l’objet "SendBTN", elle est en dehors de.
Il est maintenant temps de tester notre travail! Commencez à déboguer et remplissez les cases avec quelques données. Ici, j'ai entré John comme prénom et Doe comme nom de famille, puis j'ai cliqué sur Envoyer:
Voyons à quoi ressemble la base de données maintenant:
Oui, le nouvel enregistrement avec ID = 1 est paru et tout va bien.
Nous avons maintenant atteint la dernière fonction de réception. C'est similaire à la méthode précédente. Double-cliquez sur le bouton "Lire" et copiez le code:
Void privé ReadBTN_Click (expéditeur de l'objet, RoutedEventArgs e) // Création d'un nouvel objet proxy de notre service MyServicePortTypeClient read = new MyServicePortTypeClient (); read.GetDataCompleted + = new EventHandler(read_GetDataCompleted); // Méthode d'appel, en tant que paramètres, nous tapons le texte contenu dans IdTextBox // mais nous devons changer le type de texte de la chaîne en entier (l'ID dans le service Web est de type entier) read.GetDataAsync (Convert.ToInt32 (IdBox.Text)); void read_GetDataCompleted (expéditeur d'objet, GetDataCompletedEventArgs e) MessageBox.Show (e.Result);
Il s’agit du même processus que précédemment: "read_GetDataCompleted" est exécuté après l’obtention des données de la base de données. Dans cette méthode, nous utiliserons une boîte de message pour afficher notre résultat, à savoir le prénom et le nom. Il y a encore un pas à faire; nous devons changer le type de texte dans IdBox de chaîne en entier car la variable appelée ID dans le service Web a un type entier. Pour ce faire, j'ai utilisé une fonction appelée "Convert.ToIn32 ()"
Maintenant, nous pouvons voir si cela fonctionne. Entrez l'ID dans "IdTextBox". J'ai entré "1", puis j'ai cliqué sur le bouton "Lire".
Tout fonctionne! Notre application est maintenant complète!
Dans ce didacticiel, nous avons créé une base de données utilisant une application Windows Phone 7 Silverlight et un service Web NuSOAP. Cette base de données est utile pour recevoir ou envoyer des données. Les bases de données externes sont importantes car elles sont utilisées par de nombreuses applications mobiles..