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

C# Discussion :

Appel multiple à ftp.getResponse


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Designer API
    Inscrit en
    Octobre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Designer API

    Informations forums :
    Inscription : Octobre 2003
    Messages : 280
    Par défaut Appel multiple à ftp.getResponse
    Bonjour,

    Je réalise un programme qui lance plusieurs requêtes FTP (listing, donwload, upload, ....) et cela en boucle. Dans toutes mes fonctions, j'ai fais une fermeture de getResponse. Pourtant, il me génère de temps en temps une webException des qu'il repasse sur le getResponse.

    PS : j'ai fermé les getResponse car sur le net, j'ai vu que les appels multiples retourne le même objet.

    Avez-vous une idée ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Pourtant, il me génère de temps en temps une webException des qu'il repasse sur le getResponse.
    Pour tout ce qui FTP si tu fais plusieurs requêtes en parallèle tu est peut-être obligé de passer par une architecture en multitreading.
    Si tu as une webException c'est que tu appelles une méthode qui pointe sur un objet désinstancié.
    Avec la solution du mulithreading c.a.d lancer un thread qui fasse une tache de gestion FTP, chaque objet et son instance sera cloisonnée dans son thread.

  3. #3
    Membre éclairé
    Homme Profil pro
    Designer API
    Inscrit en
    Octobre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Designer API

    Informations forums :
    Inscription : Octobre 2003
    Messages : 280
    Par défaut
    Les traitements sont pas en parallèles. Ils se font l'un après l'autre. J'ai un boucle et dans ces boucles, j'ai mes requêtes FTP qui s'enchainent.

    Apparemment "webException.response = System.NotImplementedException"

    La fonction incriminée :
    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
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    StreamReader monStreamReader = null;//GetResponseStream
        FtpWebResponse maResponseListe = null;//GetResponse
     
        // Instanciation de deux Uri qui vont contenir les chemins source et destination
        System.Uri monUriServeur = new System.Uri(serveurCible);
     
        // Vérification de la validité de l'Uri du fichier sur le serveur FTP
        if (!(monUriServeur.Scheme == Uri.UriSchemeFtp)) {
            Console.WriteLine("L'Uri du serveur FTP n'est pas valide");
            return;//Si Uri non valide arrêt du listage
        }  
     
        try 
        {
            // Création de la requête de récupération de la liste des fichiers
            FtpWebRequest maRequeteListe = (FtpWebRequest)WebRequest.Create(monUriServeur);
            maRequeteListe.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
            maRequeteListe.KeepAlive = false;
     
            // Vérification de la présence des identifiant d'un compte, si aucun alors
            // la connexion se fait en mode anonyme
            if (!(identifiant.Length == 0)) {
                NetworkCredential monCompteFtp = new NetworkCredential(identifiant, motDePasse);
                maRequeteListe.Credentials = monCompteFtp;
            }
     
            // Récupération de la liste de fichiers           
            maResponseListe = (FtpWebResponse)maRequeteListe.GetResponse();
     
            // Placement du flux provenant du serveur dans un streamreader
            monStreamReader = new StreamReader(maResponseListe.GetResponseStream(), Encoding.Default);
     
     
            // Lecture du stream reader
            string listeBrute = monStreamReader.ReadToEnd();
     
            // Correspond à un retour chariot
            string[] separateur = { Environment.NewLine };
     
            // Découpage et récupération des noms de fichiers    
            _ListeFichier = listeBrute.Split(separateur, StringSplitOptions.RemoveEmptyEntries);
     
     
            if (verbose) {
                Console.WriteLine("**********************************************************");
                Console.WriteLine("* Récupération de la Liste des fichiers distant terminée *");
                Console.WriteLine("**********************************************************");
            }
     
            _ResultatDerniereAction = true;
        }
        catch (UriFormatException ex) 
        {        
            // Gestion des exceptions                
            Console.WriteLine("UriFormatException : " + ex.Message);
            _ResultatDerniereAction = false;
            _strErreur = "UriFormatException";
        }
        catch (WebException ex)
        {                
            Console.WriteLine("WebException : " + ex.Message);
            _ResultatDerniereAction = false;
            _strErreur = "WebException";
        }
        finally 
        {
            if (monStreamReader != null) {
                monStreamReader.Close();
            }
     
            if (maResponseListe != null) {
                maResponseListe.Close();
            }
        }

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/02/2010, 14h06
  2. Réponses: 2
    Dernier message: 26/11/2009, 18h38
  3. appel multiple de BlockingQueue d'une même méthode
    Par tiamat dans le forum Langage
    Réponses: 0
    Dernier message: 01/11/2009, 11h00
  4. DLL et appel multiple
    Par FM_UA dans le forum Langage
    Réponses: 12
    Dernier message: 14/05/2009, 14h21
  5. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/2005, 14h12

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