Wilfried Woivré & .Net

Tour d’horizon de Mobile Services

SEPT7

Bonjour à tous,

 

Juste un petit article pour vous annoncer que j’ai publié sur le blog de So@t un article qui récapitule tout ce que l’on peut faire avec Windows Azure Mobile Services !

Allez y ça se passe à cette adresse : http://blog.soat.fr/2012/09/tout-savoir-sur-windows-azure-mobile-services/ 

Et si vous souhaitez aller plus loin, voici deux autres articles sur le même sujet : Trucs et astuces avec Windows Azure Mobile Services et Utiliser Windows Azure Mobile Services dans vos applications !

 

Voilà bonne lecture à tous

Remonter

Trucs et astuces avec Windows Azure Mobile Services

SEPT5

Vu que c’est la dernière nouveauté de Windows Azure, vous comprendrez qu’en ce moment je joue avec toute la journée, donc voilà des petits trucs et astuces que je peux vous donner pour vous aider lorsque vous développez avec ce SDK, donc pour une application de type Metro !

 

Déjà pour instancier votre client mobile, et créer une table, il faut réaliser un code de ce type

MobileServiceClient _mobileServiceClient = new MobileServiceClient(_mobileServiceUrl, _mobileServiceKey);
IMobileServiceTable<AnEntity> _anEntityMobileServiceTable = _mobileServiceClient.GetTable<AnEntity>();

 

Si pendant l’exécution de ce code, notamment à la deuxième ligne vous avez une erreur de ce type :

image

Vu que l’erreur vous indique que le paramètre “key” est null, alors qu’il ne le doit pas, vous avez deux solutions, soit hypothétiser une solution et la tester, soit regarder où se trouve ce paramètre key, qui se situe en fait dans le SDK de Windows Azure Mobile Service ….

Alors la solution pour résoudre cette erreur est assez simple, dans la déclaration de votre entité vous avez simplement oublié de donner le nom d’une de vos propriétés (oui c’est simple quand on a la solution)

[DataContract(Name = "anentity")]
public class AnEntity : BaseEntity
{
    [DataMember(Name = "id")]
    public int Id;

    [DataMember(Name = "astring")]
    public string AString;
   
    [DataMember(Name = "anint")]
    public int AnInt;
   
    [DataMember]
    public bool ABool;
}

Là dans ce cas, j’avais uniquement oublié le “Name” de ma propriété “ABool” !

 

Deuxième et dernière astuce, au niveau du portail Windows Azure, il est possible de modifier les différentes  méthodes de CRUD, il s’agit de Node.js, de plus il n’y a qu’un seul environnement disponible, donc attention aux modifications en production ! Je vous conseille donc d’avoir une application Mobile Services de tests pour éviter les catastrophes du type envoyé un toast à tous vos utilisateurs en disant “Bazinga” ou alors de modifier les droits d’accès à une table !

De plus, écrivez vos scripts dans Visual Studio, Web Matrix, ou tout autre logiciel / IDE capable de fournir un minimum d’intellisense sinon ça devient rapidement laborieux.

Voilà un peu de Node.js pour envoyer un toast lors de l’insertion en base d’une entité :

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

 

N’oubliez pas les logs, ils sont consultables facilement depuis le portail HTML 5 !

Voilà en espérant que ça vous sera utile !

Remonter

Utiliser Windows Azure Mobile Services dans vos applications

SEPT3

Si Windows Azure Mobile Service ne vous dit rien, je vous conseille avant tout d’aller voir l’annonce de Scott Guthrie à ce sujet !

Et maintenant que vous avez compris à quoi cela sert, vous vous dîtes, et flûte le service a l’air pourtant intéressant, cependant actuellement je ne peux l’utiliser qu’avec une application Windows 8 ! Et bien, sachez que non, il est possible de l’utiliser pour des applications Windows Phone 7, voir WPF, ou ce que vous souhaitez ! Bon, bien entendu, il ne sera pas possible d’utiliser les possibilités de push et d’authentification fournis par ce service, par contre un système CRUD bête et méchant, c’est possible !

Alors pour le prouver, j’ai réalisé (très rapidement) une application WPF permettant d’ajouter des items dans une table, et de les lire.

Le schéma de ces données est le suivant :

image

 

Alors pour pouvoir attaquer notre service hébergé dans Azure, de quoi avons-nous besoin, uniquement des urls pour lire, ajouter, modifier, supprimer ainsi que de votre clé privée pour accéder à votre service.

 

public readonly string GetTestDatas = "https://votrenamespace.azure-mobile.net/tables/testdata/";
public readonly string AddTestData = "https://votrenamespace.azure-mobile.net/tables/testdata/";
public readonly string UpdateTestData = "https://votrenamespace.azure-mobile.net/tables/testdata/";
public readonly string DeleteTestData = "https://votrenamespace.azure-mobile.net/tables/testdata/";
public readonly string ApiKey = "VotreCléPrivée";

 

Alors comment cela se passe ? Et bien c’est fort simple, votre application doit faire des appels en Json, soit en GET ou en POST selon les besoins, en prenant bien soin d’ajouter dans les headers de vos requêtes.

Par exemple, pour lister les différents éléments de ma table, il me suffit d’exécuter ce code :

public List<TestData> Get()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(GetTestDatas);
    request.Headers.Add("X-ZUMO-APPLICATION", ApiKey);
    request.Method = "GET";
    request.ContentType = "application/json";

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream responseStream = response.GetResponseStream();

    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<TestData>));
    return (List<TestData>)ser.ReadObject(responseStream);
}

Bien entendu, il faut avoir au préalable créé une classe TestData dans mon cas, qui contient les différents valeurs nécessaires à la sérialisation, et la désérialisation.

[DataContract]
public class TestData
{
    [DataMember(Name="id")]
    public int Id { get; set; }
    [DataMember(Name = "value")]
    public string Value { get; set; }
}

 

De même pour l’insertion de données, ou pour la modification de données, il suffit de passer l’id de l’élément que vous voulez modifier pour qu’il le mette à jour ou insère une ligne, quand à la suppression, il faut juste passer la clé primaire de l’objet à supprimer pour réaliser cette action.

public TestData Put(TestData item)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AddTestData);
    request.Headers.Add("X-ZUMO-APPLICATION", ApiKey);
    request.Method = "POST";
    request.ContentType = "application/json";

    using (var streamWriter = new StreamWriter(request.GetRequestStream()))
    {
        string json = "{\"value\": \"" + item.Value + "\"}";

        streamWriter.Write(json);
    }


    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream responseStream = response.GetResponseStream();

    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(TestData));
    return (TestData)ser.ReadObject(responseStream);
}

 

On a donc vu qu’il est possible de détourner cette fonctionnalité pour l’utiliser au sein de nos projets, et dans ce cas de s’abstraire de toute la partie CRUD d’une application.

Tout le code est là, je ne vous le fournis donc pas !

Remonter