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

ASP.NET Discussion :

Lecture xml par adresse URL


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Lecture xml par adresse URL
    Bonjour à tous,

    Voilà je vous explique mon soucis en espérant que quelqu'un pourra m'aider.
    Je souhaite récupérer les données d'un fichier xml se trouvant sur un site précis.

    Si je tape l'URL suivante dans mon browser (https://user:password@developer.idig...r_reading1.xml), celui-ci m'affiche les données de mon fichier xml.

    Maintenant, j'essaie de les récupérer par asp.net avec le code suivant:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
            string URLString = "https://user:password@developer.idigi.com/ws/data/~/00000000-00000000-00409DFF-FF3DB61A/sensor_demo/sensor_reading1.xml";
            XmlTextReader reader = new XmlTextReader(URLString);
            txtResult.Text =  txtResult.Text + "Greg " + reader.Name.ToString() + "\r\n";
            while (reader.Read())
            {
                // Traiter les données ici.
                txtResult.Text = txtResult.Text + reader.Name;
            }
    A ce moment, le code plante au niveau du while avec l'erreur :

    Le serveur distant a retourné une erreur : (401) Non autorisé.
    Le certificat du dessus était censé régler le problème mais ce n'est pas le cas.

    Merci d'avance pour vos suggestions.

    Grigou

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je pense que tu vas être obligé de passer par une HttpWebRequest pour spécifier les credentials (il y a peut-être un autre moyen, mais là comme ça je vois pas...)

    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
    string URLString = "https://developer.idigi.com/ws/data/~/00000000-00000000-00409DFF-FF3DB61A/sensor_demo/sensor_reading1.xml";
    var request = WebRequest.Create(URLString) as HttpWebRequest;
    request.Credentials = new NetworkCredentials("user", "password");
    using (var response = request.GetResponse() as HttpWebResponse)
    using (var stream = response.GetStream())
    using (var reader = XmlReader.Create(stream))
    {
            StringBuilder sb = new StringBuilder();
     
            sb.AppendLine("Greg " + reader.Name);
            while (reader.Read())
            {
                // Traiter les données ici.
                sb.Append(reader.Name);
            }
            txtResult.Text += sb.ToString();
    }
    Au fait, MSDN déconseille de créer explicitement une instance de XmlTextReader. Il faut utiliser XmlReader.Create à la place

    D'autre part, évite de concaténer des chaines dans un boucle, surtout s'il peut y avoir beaucoup d'itérations : ça crée plein d'instances temporaires de String, ce qui inutilement de la pression sur le garbage collector. Utilise plutôt un StringBuilder

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Mon nouveau Gourou
    Salut tomlev,

    Je viens de te hisser au rang de nouveau gourou dans ma galerie des sauveurs... Ta solution proposée fonctionne à merveille.

    Pour les débutants en mon genre qui auraient le même problème, je tiens à préciser que, par rapport au code de tomlev, j'ai du:
    -Enlever le "s" à "request.Credentials = new NetworkCredential("user", "password");"
    -Utiliser GetResponseStream à la place de stream dans using (var stream = response.GetStream())
    -Rajouter le using System.Text;

    Ne me demandez pas pourquoi, mais ça marche. Tomlev pourra peut-être expliquer pour notre culture générale.

    Merci à lui en tout cas.

    Grigou

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par grigou25 Voir le message
    Ne me demandez pas pourquoi, mais ça marche. Tomlev pourra peut-être expliquer pour notre culture générale.
    Ben j'ai fait ça de tete, et je connais pas la doc par coeur... d'où des petites erreurs ^^
    Pour le namespace, je l'avais pas précisé, vu que VS propose automatiquement de l'ajouter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture d un fichier xml par xsl
    Par reudodviking dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/10/2007, 23h19
  2. Réponses: 2
    Dernier message: 20/06/2007, 10h16
  3. [DOM] Mettre à jour un fichier XML (par URL)
    Par ensiie dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 21/01/2007, 12h56
  4. [SAX] Lecture XML par XmlSax
    Par Carrel dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 11/12/2006, 16h02

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