Accueil Nos publications Blog Tout savoir sur Windows Azure Mobile Services

Tout savoir sur Windows Azure Mobile Services

Windows AzureAvec l’arrivée de Windows 8, et de son Store, il devient très simple pour un développeur de publier et de diffuser des applications sur cette nouvelle plateforme. Qu’elle soit réalisée avec du HTML 5 et WinJS, du .Net, ou même du C++. Cependant, lors du développement d’une application, des questions peuvent se poser telle que “Comment ajouter un mode de notifications aux utilisateurs ? “, “Comment gérer l’authentification à mon application ?”, ou même “Comment stocker des données ailleurs que sur le poste client ? “ . Ces diverses problématiques sont en soit assez simple à résoudre, cependant il faut avoir accès à un serveur accessible depuis internet capable de répondre à nos besoins, et si possible que ce serveur puisse tenir la charge. Pour répondre à cela, Microsoft a sorti une nouvelle brique à Windows Azure, il s’agit de Mobile Services.

Activer Windows Azure Mobile Services

Etant donné que Microsoft vient récemment de sortir cette fonctionnalité, celle-ci n’est pas encore en RTM, elle est uniquement disponible en preview.

Attention tout de même cela comporte des avantages et des inconvénients, déjà cette fonctionnalité n’a aucune garantie de stabilité, ainsi qu’aucun SLA, cependant elle est gratuite, et elle repose sur des technologies déjà éprouvées sur Windows Azure telle que SQL Azure, et Node.js. De plus le mode preview laisse envisager que des évolutions de ce service sont possibles, et donc peut être un support du Table Storage.

Donc pour activer cette fonctionnalité, il faut au préalable un compte Windows Azure, il est possible de créer un compte de test d’une durée de 90 jours à cette adresse , ensuite dans la rubrique “Mon Compte > Fonctionnalité préliminaire” il est possible d’activer Windows Azure Mobile Service, comme on peut le voir ci-contre.

A la suite, de cela vous allez recevoir un mail vous annonçant que cette fonctionnalité a été activée sur votre compte, à ce jour elle s’active immédiatement, cependant il est possible que d’ici quelques temps une file d’attente soit mise en place en attendant que le service soit déployé sur tous les datacenter de la plateforme.

Créer son application Mobile Services

Sur le portail HTML 5 de Windows Azure que vous pouvez retrouver à cette url : https://manage.windowsazure.com , vous verrez apparaître une nouvelle rubrique associée à vos applications de type Mobile Services. Pour créer un nouveau service de ce type, il faut donc faire « New > Create », vous arriverez donc à l’interface que l’on peut voir ci-contre.

On peut déjà noter, que celle-ci nous permet de choisir le nom de notre service, et ainsi composer son url de ce type : https://votrenom.azure-mobile.net/. De plus il est possible de choisir notre base de données, ici dans notre cas, je choisis une nouvelle base, cependant il est possible d’utiliser une base existante.

A noter que votre service sera hébergé à l’est des Etats-Unis, et non en Europe, ceci à cause du fait que c’est une fonctionnalité en preview, elle n’est donc pour le moment pas disponible sur tous les datacenters.

L’étape suivante vous demande de configurer votre base de données, tel que son nom, le serveur sur laquelle elle sera hébergée, lui aussi à l’est des Etats-Unis, et le login et le mot de passe de l’administrateur.

Stocker et utiliser vos données

La première action à réaliser est de créer les tables au sein de l’application Mobile Services, pour cela, il faut aller sur le portail, et créer une nouvelle table.

Comme on peut le voir ci-contre, chaque opération peut avoir un niveau de permission différent, il en existe 4 différents :

–          Everyone

–          Anybody with the Application Key

–          Only Authenticated Users

–          Only Scripts and Admins

Cela veut dire, qu’on peut facilement filtrer les capacités de l’utilisateur, rien qu’avec cette gestion de filtre, sans pour autant avoir à modifier son interface, puisqu’en cas d’échec le service nous annonce que la requête a échouée puisque nous ne sommes pas autorisés à effectuer cette action. De plus, à ce  jour, l’authentification n’est possible qu’avec une authentification de type Live Id, la gestion d’une authentification de type entreprise n’est pour le moment pas permise. A noter que vous ne choisissez pas les colonnes à créer dans votre table, par défaut il vous crée une colonne de type bigint qui s’appelle id et qui contient la clé primaire de votre table. Les autres colonnes sont ajoutées automatiquement lors de vos insertions et de vos modifications, il est néanmoins possible de désactiver le schéma dynamique après que vous l’ayez défini, afin d’éviter des modifications ultérieures non souhaitées.

Et maintenant, au niveau du développement, vous pouvez utiliser Mobile Services dans vos applications de type Modern UI que ce soit en C#, en Javascript, et même en C++, vous devez commencer par télécharger le SDK qui se trouve sur GitHub .

Par la suite, dans votre application Windows 8, il est possible de rajouter une librairie de type « Windows Azure Mobile Services Managed Client » comme on peut le voir ci-dessous.

Au niveau du développement, comme cela se passe sur des applications de type Modern UI, il est donc normal de retrouver une syntaxe de type async / await pour les différents appels à notre service. Nous allons donc avoir un objet de type IMobileServiceTable<T>, ou T est l’objet que nous voulons mapper entre notre base de données et notre application. Cet objet va contenir des méthodes asynchrones permettant d’effectuer des opérations de type CRUD, mais aussi des méthodes pour réaliser des filtres, de l’ordonnancement, et des requêtes par projection comme on peut le voir sur MSDN .

Si on prend pour exemple la partie lecture des informations, il faut donc réaliser le code suivant :


string mobileUrl = "YourUrl.azure-mobile.net";
string secretKey = "YourSecretKey";

var serviceClient = new MobileServiceClient(mobileUrl, secretKey);
IMobileServiceTable table = _mobileServiceClient.GetTable();

var readTask = table.ReadAsync();
var awaiter = readTask.GetAwaiter();
awaiter.OnCompleted(() =>
                        {
                            if (readTask.Status == TaskStatus.Faulted)
                            {
                                // Erreur
                            }
                            else
                            {
                                // Display result
                            }
                        });

Il faut bien penser à vérifier s’il y a une erreur afin d’en notifier l’utilisateur, puisque si vous exécutez la méthode ReadAsync(), vous allez avoir un résultat vide, sans pour autant avoir d’erreur.

Il est possible par ailleurs, de modifier le comportement au niveau du serveur, afin qu’il exécute des actions de vérification voir même lancer des notifications aux différents clients pour les prévenir qu’une mise à jour des données a été réalisée, par exemple on peut voir ci-dessous la vérification des données saisies, et l’ajout automatique de la date d’ajout en base :


function insert(item, user, request) {
    if (item.astring.length > 10) {
        request.respond(statusCodes.BAD_REQUEST, 'Text length must be under 10');
    } else {
        item.createdAt = new Date();
        request.execute();
    }
}

Ainsi avec le channel de l’application, au préalable compris dans l’entité que l’on veut insérer, il est possible d’effectuer un lancement de notification à tous les utilisateurs pour leur avertir qu’une nouvelle donnée est disponible. De plus comme il s’agit de Node.Js, il est tout à fait envisageable d’effectuer des requêtes SQL pour n’envoyer la notification qu’aux personnes concernées.

Gérer l’authentification et le push

Au sein d’une application Windows 8, il est souvent nécessaire de gérer un module d’identification, de même la possibilité de pousser des notifications aux utilisateurs est très appréciée, par exemple pour nous prévenir que tel utilisateur a commenté notre statut.

Au sein de notre application Windows Azure Mobile Service, il est possible de configurer un système de  notifications et de login, pour cela il faut au préalable enregistrer son application sur Windows Push Notifications & Live Connect, et ensuite reporter les informations dans le manifest de votre application Windows 8, ainsi que dans l’interface Azure comme on peut le voir ci-dessous.

Windows Azure Credentials

Afin de réaliser une notification aux différents utilisateurs, il est nécessaire de récupérer l’url du channel de l’application, il est possible de le faire de cette façon au sein de votre application :


var currentChannel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
string channelUri = currentChannel.Uri;

Ensuite, il est nécessaire de passer cette information au serveur lorsque vous voulez notifier vos utilisateurs, par exemple lors de l’insertion d’un élément, il est possible de mettre en place la méthode qui suit afin que l’utilisateur soit averti de l’ajout d’un élément dans le cas où l’insertion s’est correctement déroulée.


function insert(item, user, request) {
    request.execute({
        success: function () {
            request.respond();
            push.wns.sendToastText04(item.channel, { text1: item.astring }, {
                success: function (pushResponse) {
                    console.log("Sent push: ", pushResponse);
                }
            });
        }
    });
}

Par exemple si on avait voulu réaliser un système tel qu’un utilisateur puisse écrire des messages, et que d’autres puissent les commenter, il nous aurait fallu stocker le channel de la personne qui a posté le message, et lui envoyer une notification lorsqu’une personne ajoute un commentaire à son message.

Quant à l’authentification, il est possible de se connecter avec son Microsoft Account (ou LiveID), pour cela il vous faut installer et référencer le Live SDK pour Windows 8. Par la suite, il suffit d’implémenter dans votre application, la connexion au service Live, puis avec votre compte Live de se connecter à votre service disponible sur Windows Azure, comme le montre le code suivant :


LiveAuthClient liveIdClient = new LiveAuthClient("https://yoururl.azure-mobile.net/");
LiveLoginResult result = await liveIdClient.LoginAsync(new[] { "wl.basic" });
if (result.Status == LiveConnectSessionStatus.Connected)
{
    session = result.Session;
    LiveConnectClient client = new LiveConnectClient(result.Session);
    LiveOperationResult meResult = await client.GetAsync("me");
    MobileServiceUser loginResult = await _mobileServiceClient.LoginAsync(result.Session.AuthenticationToken);
}

Avec ces différentes fonctionnalités, il devient assez simple d’obtenir une dose de Cloud dans votre application Windows 8, sans pour autant avoir des connaissances poussées dans le domaine puisqu’à part les différentes procédures de CRUD à modifier selon les besoins vous avez très peu d’actions à mener au niveau de votre service.

Si vous souhaitez néanmoins aller plus loin, j’ai écrit un article avec des astuces pour développer une application avec Mobile Service, ainsi qu’un article sur comment utiliser Mobile Service dans une application qui n’est pas de type Modern UI.