2010-11-25 25 views
1

Je souhaite consommer un service XML-RPC construit en PHP pour mon application WP7 mais je ne trouve aucun exemple sans utiliser la bibliothèque de xml-rpc.net. Je ne peux pas créer une référence à cette bibliothèque, car elle n'a pas été construite en utilisant le runtime de Windows Phone (comme VS m'a informé poliment). Un poster sur une question similaire sur stackoverflow (malheureusement, je ne peux pas encore ajouter de commentaires) suggère d'utiliser la version CF de la librairie mais j'ai la même erreur quand j'essaye de créer une référence.Consommation du service XML-RPC avec Windows Phone 7 App

Je suppose, s'il n'y a aucun moyen d'utiliser cette bibliothèque, une alternative serait d'utiliser HttpWebRequest et d'analyser le XML manuellement.

Merci d'avance pour vos réponses!

Edit:

Voici le code XML retourné, comment pourrais-je aller sur l'analyse syntaxique qui?

réponse XML: link text (Désolé pour le lien externe, je ne pouvais pas copier coller tout ce ici)

+1

Vous avez répondu à votre question: P –

+0

J'espérais ne pas avoir à analyser le XML manuellement! – Xander

Répondre

2

Jetez un oeil à ma réponse à this question.

Il montre un exemple simple d'utilisation de WebClient pour obtenir des données XML à partir d'un site Web, puis l'analyser. Ce n'est pas difficile. Alors que l'exemple utilise WebClient, cela bloque le thread d'interface utilisateur lors du traitement du thread terminé. Vous devriez donc envisager d'utiliser HttpWebRequest à la place si votre traitement du XML renvoyé est tout sauf trivial.

Edit:
Vous pouvez faire quelque chose comme ce qui suit pour traiter votre réponse:

var myStructs = new List<MyStruct>(); 

foreach (var child in xml.Elements("params").Elements("param").Elements("value").Elements("array").Elements("data").Elements("value")) 
{ 
    var newStruct = new MyStruct(); 

    var members = child.Elements("struct").Elements("member"); 

    foreach (var member in members) 
    { 
     switch (member.Elements("name").First().Value) 
     { 
      case "id": 
       newStruct.Id = int.Parse(member.Elements("value").First().Elements("int").First().Value); 
       break; 
      case "idParent": 
       newStruct.IdParent = int.Parse(member.Elements("value").First().Elements("int").First().Value); 
       break; 
      case "idUser": 
       newStruct.IdUser = int.Parse(member.Elements("value").First().Elements("int").First().Value); 
       break; 
      case "rating": 
       newStruct.IdUser = int.Parse(member.Elements("value").First().Elements("int").First().Value); 
       break; 
      case "imageUrl": 
       newStruct.ImageUrl = member.Elements("value").First().Elements("int").First().Value; 
       break; 
      case "message": 
       newStruct.Message = member.Elements("value").First().Elements("int").First().Value; 
       break; 
      case "title": 
       newStruct.Title = member.Elements("value").First().Elements("int").First().Value; 
       break; 
      case "username": 
       newStruct.Username = member.Elements("value").First().Elements("int").First().Value; 
       break; 
      case "ytVideoId": 
       newStruct.YtVideoId = member.Elements("value").First().Elements("int").First().Value; 
       break; 
     } 
    } 

    myStructs.Add(newStruct); 
} 

Cela suppose que vous avez les suivantes

internal struct MyStruct 
{ 
    public int Id { get; set; } 
    public int IdParent { get; set; } 
    public int IdUser { get; set; } 
    public string Title { get; set; } 
    public string Message { get; set; } 
    public int Rating { get; set; } 
    public string Username { get; set; } 
    public string ImageUrl { get; set; } 
    public string YtVideoId { get; set; } 
} 

et que la xml variable est un XElement tenant la réponse.

Je serai heureux d'admettre que ce n'est pas joli, mais cela fonctionne. Vous voudrez probablement ajouter beaucoup de gestion des erreurs!

+0

C'était un message très intéressant, merci! J'ai réussi à envoyer et à recevoir le XML approprié, mais voir ce qui est retourné me donne envie de sortir mes dents. J'ai mis à jour mon article original avec le XML, y a-t-il une bibliothèque qui pourrait m'aider à passer à travers cela facilement ou est-ce que je dois aller avec foreach et switch etc? – Xander