IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Récupérer fichier XML depuis un serveur web


Sujet :

Silverlight

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 41
    Points : 37
    Points
    37
    Par défaut Récupérer fichier XML depuis un serveur web
    Bonjour,

    Je souhaite remplir un objet datagrid à l'aide d'information contenues dans une base de données.

    Pour cela j'ai un serveur qui récupère ces données et les mets dans un fichier XML lorsque que l'on appelle une action (l'action envoi le retourne le fichier xml complet): http://monserveur/monappli/monaction...nparam2=param2

    J'aimerais récupérer les données de mon fichier xml retourné lors de l'appelle de l'action.

    J'ai trouvé ce bout de code sur le net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                    XDocument oDoc = XDocument.Load("File.xml");
                    var myData = from info in oDoc.Descendants("item")
                                 select new Person
                                 {
                                     FirstName = Convert.ToString(info.Element("FirstName").Value),
                                     LastName = Convert.ToString(info.Element("LastName").Value),
                                     Age = Convert.ToString(info.Element("Age").Value),
                                     IsMale = Convert.ToString(info.Element("IsMale").Value)
                                 };
                    oGrid = this.FindName("myDataGrid") as DataGrid;
                    oGrid.ItemsSource = myData;
    Le problème est que "XDocument oDoc = XDocument.Load("File.xml");" ne marche que pour un fichier en local. J'aimerais savoir comment remplacer cette ligne pour récupérer mon fichier XML sur le serveur (en Flex je sais qu'il faut un HTTPService), je n'ai pas trouvé l'équivalent en Silverlight.

    Merci pour vos réponses

  2. #2
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Bonjour,

    tu as le choix : WebClient et HttpWebRequest fonctionnent

    http://blogs.msdn.com/silverlight_sd...ebrequest.aspx

    WebClient est plus facile a utiliser.
    .
    Pas de question technique en MP, merci.
    .
    Un emulator Gameboy Color pour Windows Phone ?
    c'est moi qui l'ai fait

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 41
    Points : 37
    Points
    37
    Par défaut
    Merci pour le lien, je me suis donc basé sur le petit tuto que tu m'a passé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    WebClient client = new WebClient();
                client.DownloadStringCompleted +=new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
                client.DownloadStringAsync(new Uri("http://monserveur/monappli/monaction...nparam2=param2"));
     
            void client_DownloadStringCompleted(objectsender,DownloadStringCompletedEventArgs e)
            {
                    XDocument oDoc = XDocument.Load(e.Result);
                    var myData = from info in oDoc.Descendants("item")
                                 select new Person
                                 {
                                     FirstName = Convert.ToString(info.Element("FirstName").Value),
                                     LastName = Convert.ToString(info.Element("LastName").Value),
                                     Age = Convert.ToString(info.Element("Age").Value),
                                     IsMale = Convert.ToString(info.Element("IsMale").Value)
                                 };
                    oGrid = this.FindName("myDataGrid") as DataGrid;
                    oGrid.ItemsSource = myData;
            }
    Quand j'exécute ce code je vois au log (du serveur) que l'action n'a pas été appelé. De plus j'ai le droit a une grosse exception : TargetInvocationException.

    En sachant que l'URL est bonne quand je la met dans mon navigateur il me télécharge bien mon fichier xml.

    Si quelqu'un a une idée.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 41
    Points : 37
    Points
    37
    Par défaut
    Pareil avec HttpWebRequest il me met une erreur de sécurité. Ce que je comprend des deux exceptions (avec HttpWebRequest et WebClient) c'est qu'il y a une erreur de sécurité quelque part, mais je ne vois pas ce qu'il faut faire pour régler ça.

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Quelle est l'erreur de sécurité ? Tu as essayé de mettre un fichier crossaccesspolicy.xml ?

  6. #6
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Si le serveur contenant ton fichier XML n'est pas le serveur hébergeant contenant ton application Silverlight, il y a de bonne chance que se soit un problème de ClientAccessPolicy.xml comme dit Thomas :

    un exemple de fichier se trouve dans l'article ci dessous. Il se réfère à du WCF mais normalement c'est la même chose pour toi :

    http://blog.naviso.fr/wordpress/?p=27
    .
    Pas de question technique en MP, merci.
    .
    Un emulator Gameboy Color pour Windows Phone ?
    c'est moi qui l'ai fait

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 41
    Points : 37
    Points
    37
    Par défaut
    Merci a tous pour vos astuces et vos liens, ça m'a beaucoup aidé à régler mon problème.

    Effectivement le serveur sur lequel je fais ma requête n'est pas le même que le serveur qui héberge mon site Silverlight (dans le futur ça le sera mais par le temps du dev de l'application), c'était donc bien un problème d'accès.

    Au début j'ai créé un fichier crossdomain.xml que j'ai mis à la racine du serveur ASP.NET (serveur que visual studio créé automatiquement pour exécuter son projet en local sans avoir à installer un serveur IIS ou autre). Ça n'a rien changé toujours la même erreur. Ensuite j'ai cherché a voir si des paquets circulé quand même sur le réseau (entre mon pc et le serveur ou j'effectue ma requête) à l'aide de l'outil Wireshark. Et j'ai vu qu'il cherché le fichier crossdomain.xml sur le serveur (pourquoi je ne sait pas, il me semble plus logique qu'il le cherche en local) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    50	11.457431	172.XXX.XXX.1 172.XXX.XXX.2	 HTTP	GET /crossdomain.xml HTTP/1.1 
    52	11.460496	172.XXX.XXX.2	 172.XXX.XXX.1	 HTTP	HTTP/1.1 404 /crossdomain.xml (text/html)
    J'ai donc mis mon fichier crossdomain.xml à la racine du serveur (ou je fais ma requête) et la ça marche il le trouve et appelle mon service.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    53	11.467094	172.XXX.XXX.1 172.XXX.XXX.2	HTTP	GET /crossdomain.xml HTTP/1.1 
    55	11.469379	172.XXX.XXX.2	 172.XXX.XXX.1	HTTP	HTTP/1.1 200 OK  (text/html)
    J'ai pas tout compris en détail mais en tout cas ça marche^^.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Slt,
    j'ai essayé de faire pareil que toi mais ca marche toujours pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WebClient client = new WebClient();
                client.DownloadStringCompleted +=new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
                client.DownloadStringAsync(new Uri("http://....fichier.xml"));
            }
     
            private void client_DownloadStringCompleted(object sender,DownloadStringCompletedEventArgs e)
            {
                    XDocument oDoc = XDocument.Load(e.Result);
    Erreur An exception occurred during the operation, making the result invalid. Check InnerException for exception details.
    {System.Reflection.TargetInvocationException: An exception occurred during the operation, making the result invalid. Check InnerException for exception details. ---> System.Security.SecurityException ---> System.Security.SecurityException: Security error.
    at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)....
    Le site n'est pas sur le serveur local IIS. J'ai mis le fichier xml dans le dossier root mais rien n'y fait.
    Help !!

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Montre nous ton fichier xml.

    Si tu analyses le traffic avec Fiddler est-ce que tu vois l'appel au fichier xml ? Si oui est-ce que tu vois le retour également ?

    http://www.fiddler2.com/fiddler2/
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Alors le fichier xml : http://api.flightcaster.com/flights.xml

    Resultats Fiddler:
    Il va chercher les fichiers clientaccesspolicy, crossdomain.xml.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Erreur 404 pour les deux fichiers xml

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Je ne sais plus où je dois mettre ces deux fichiers xml.
    Ils ne sont pas dans mon site mais dans le dossier wwwroot.
    Que faire?


    J'ai vu avec firebug qu'on recherchait les deux fichiers xml sur le serveur distant:
    http://api.flightcaster.com/clientaccesspolicy.xml
    http://api.flightcaster.com/crossdomain.xml

  13. #13
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par galileogis Voir le message
    Je ne sais plus où je dois mettre ces deux fichiers xml.
    Ils ne sont pas dans mon site mais dans le dossier wwwroot.
    Que faire?


    J'ai vu avec firebug qu'on recherchait les deux fichiers xml sur le serveur distant:
    http://api.flightcaster.com/clientaccesspolicy.xml
    http://api.flightcaster.com/crossdomain.xml
    Il semble que tes fichiers ne soit pas au bon endroit.
    Tu as quoi comme répertoire dans wwwroot ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Rien à part :
    Dossier : aspnet_client
    Fichier : iisstart et welcome
    et le fichier crossdomain.xml

    Je suis avec IIS de Seven.

  15. #15
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par galileogis Voir le message
    Rien à part :
    Dossier : aspnet_client
    Fichier : iisstart et welcome
    et le fichier crossdomain.xml

    Je suis avec IIS de Seven.
    Tu es bien administrateur de flightcaster.com hein ? C'est sur ce serveur qu'il faut mettre les fichiers par sur ta machine (sauf si le site est hébergé dessus).
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Non non je ne suis pas propriétaire du site.
    J'aimerai simplement consulter les fichiers xml disponibles.

  17. #17
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par galileogis Voir le message
    Non non je ne suis pas propriétaire du site.
    J'aimerai simplement consulter les fichiers xml disponibles.
    Si le site ne t'autorise pas explicitement alors tu ne peux pas directement avec Silverlight. La solution est de te créer un Web Service qui va faire la demande pour toi et Silverlight interrogera ton Web Service.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    oki.
    Merci pour l'info.
    Donc je vais créer un web service pour mon application silverlight.
    Plutot WebService1.asmx ou bien WCF ? coté performance , le mieux c'est quoi?
    Merci encore

  19. #19
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par galileogis Voir le message
    oki.
    Merci pour l'info.
    Donc je vais créer un web service pour mon application silverlight.
    Plutot WebService1.asmx ou bien WCF ? coté performance , le mieux c'est quoi?
    Merci encore
    Vu ce que tu veux faire c'est pareil. Prends le plus facile/ce que tu connais déjà/le plus facile à hebergé pour toi.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  20. #20
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Asmx est obsolète, utilise plutôt WCF si l'application doit être pérenne.

    Et même si c'est juste pour un POC dont l'horizon temporel est réduit mieux vaut que tu capitalises sur une techno d'avenir.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Erreurs de lecture d'un fichier xml depuis web
    Par Ema1714 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 30/03/2014, 18h28
  2. Réponses: 3
    Dernier message: 06/11/2011, 08h21
  3. Réponses: 4
    Dernier message: 03/11/2010, 10h16
  4. Publier un fichier XML dans un serveur web
    Par jinar dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 25/04/2008, 10h27
  5. download de fichier depuis un serveur web
    Par minusette dans le forum Modules
    Réponses: 9
    Dernier message: 14/10/2005, 09h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo