2 pièce(s) jointe(s)
AggregateException sur un client de service C#
Bonsoir et merci a tous ceux qui me liront!
J'ai coder un service REST (en PHP avec NetBeans) qui va chercher dans une BdD ce que demande un client pour remplir puis envoyer une chaine XML.
J'ai fais des test via Chrome et IE, la structure XML renvoyée est correct.
La voici:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?xml version='1.0'?>
<Appareils>
<Appareil>
<id>{$datas[0]['idAppareil']}</id>
<nom>{$datas[0]['Nom']}</nom>
<IP>{$datas[0]['AdIP']}</IP>
</Appareil>
<Appareil>
<id>{$datas[1]['idAppareil']}</id>
<nom>{$datas[1]['Nom']}</nom>
<IP>{$datas[1]['AdIP']}</IP>
</Appareil>
</Appareils> |
Le service me retourne ceci (qui est correct):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?xml version='1.0'?>
<Appareils>
<Appareil>
<id>1</id>
<nom>S-BOARD-SRA</nom>
<IP>192.168.200.215</IP>
</Appareil>
<Appareil>
<id>2</id>
<nom>S-BOARD-ORT</nom>
<IP>192.168.156.223</IP>
</Appareil>
</Appareils> |
Le problème c'est avec mon client C#: Lors de l’exécution de son code une AggregateException est levé. J'ai chercher un peu sur internet mais rien trouver qui résout mon problème.
En faisant des tests je suis arriver a voir que ce qu'il reçoit est bien le XML avec la bonne structure:
Pièce jointe 200494
Je suis aussi a afficher l'erreur le Message de l'Exception:
Pièce jointe 200495
Maintenant voila mon code:
Les classe en C# (générer avec http://xmltocsharp.azurewebsites.net/ ):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| using System.Collections.Generic;
using System.Xml.Serialization;
namespace SRA
{
[XmlRoot(ElementName = "Appareil")]
public class Appareil
{
[XmlElement(ElementName = "id")]
public string Id { get; set; }
[XmlElement(ElementName = "nom")]
public string Nom { get; set; }
[XmlElement(ElementName = "IP")]
public string IP { get; set; }
}
[XmlRoot(ElementName = "Appareils")]
public class Appareils
{
[XmlElement(ElementName = "Appareils")]
public List<Appareil> Appareil { get; set; }
}
} |
Le Main du client C#:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net.Http.Headers;
using SRA;
namespace SRA
{
class Program
{
static void Main(string[] args)
{
HttpClient ClientOne = new HttpClient();
ClientOne.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
string urlSRA = "http://localhost/PROJET/TEST/projetSRA/services/listeAppareils.xml.php/appareil"; //requete sur le serveur REST: demande la liste des appareils
//contenus dans la BdD 'sra' et table appareil
HttpResponseMessage sraInfo = ClientOne.GetAsync(urlSRA).Result;
try
{
if(sraInfo.IsSuccessStatusCode)
{
string test=sraInfo.Content.ReadAsStringAsync().Result;
Console.WriteLine(test+"\n\n\n"); //affiche la chaine XML reçue du serveur
Console.WriteLine(sraInfo.Content.ReadAsAsync<Appareils>().Exception); //affiche le "message" d'erreur
/*Appareils Apps = sraInfo.Content.ReadAsAsync<Appareils>().Result; //a la base l'erreur est levée par cette ligne, signal juste une AggregateException
foreach (Appareil App in Apps.Appareil) //le foreach affiche les propriété de chaque appareil
{
Console.WriteLine("ID: {0}; Nom: {1}; IP: {2}", App.Id, App.Nom, App.IP);
}*/
}
else
{ Console.WriteLine("{0} ({1})", (int)sraInfo.StatusCode, sraInfo.ReasonPhrase); }
}
catch (System.AggregateException Exception)
{ Console.WriteLine(Exception.Message); }
finally
{ Console.ReadKey(); }
}
}
} |
D'après ce que j'ai compris de l'erreur sur la 2ème image, il s'attends à recevoir un 'Appareils' et reçoit un 'Appareils'.
J'ai essayer sans la 1ère ligne du XML, de changer le nom des classes etc, rien n'a marcher.
Je sais pas trop où regarder là, help pls :D .