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

VB.NET Discussion :

VB.NET et FTP récalcitrant :(


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 39
    Par défaut VB.NET et FTP récalcitrant :(
    Bonjour,

    Je suis en train de me battre depuis plusieurs heures sur une application console qui doit communiquer avec un serveur FTP.

    Le pitch : Je regarde dans un répertoire du FTP, je boucle sur tous les dossiers et pour chaque dossier je boucle sur tous les fichiers qu'il contient.

    Avec mon serveur de test (perso) aucun souci, mais avec le serveur de prod gros problème : Environ 1 requête sur 2 provoque une erreur 501 (erreur de syntaxe dans les paramètres ou les arguments).

    Je ne vois pas comment une erreur peut arriver si je change juste l'adresse du FTP. Pourquoi une requête sur deux alors que ce sont des méthodes qui génèrent mes requêtes ?

    Voici à quoi ressemble le code :

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    Public Sub grab()
    	'On récupère les numéros de fax
    	Dim File As String
    	Dim MyArray As Array = Nothing
    	Dim MyFiles As Array = Nothing
     
    	Dim MonClient As New PostAvenue.Client
    	Dim SQL As System.Data.SqlClient.SqlCommand
    	Dim RS As System.Data.SqlClient.SqlDataReader
    	Dim oConnectionInsert As System.Data.SqlClient.SqlConnection
     
    	'On parcoure les dossiers présents sur le FTP
    	oConnectionInsert = New System.Data.SqlClient.SqlConnection()
    	oConnectionInsert.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings("POSTAVENUEConnectionString").ToString
    	oConnectionInsert.Open()
     
    	MyArray = listeDossiers("ftp://" & Client.Hostname & "/FAX_IN/", Client.Username, Client.Password)
     
    	For Each SDA As String In MyArray
     
    		'On ne prend pas les dossier '.' et '..'
    		If Not SDA.EndsWith(".") Then
     
    			MyFiles = listeFichiers("ftp://" & Client.Hostname & "/DOSSIER_IN/" & SDA & "/", Client.Username, Client.Password)
     
    			If Not (MyFiles Is Nothing) Then
     
    				SQL = oConnectionInsert.CreateCommand()
    				SQL.CommandText = "Select SDA_ClientID FROM TBL_SDA WHERE SDA_NoSDA='" & SDA & "'"
    				RS = SQL.ExecuteReader()
     
    				If RS.HasRows Then
     
    					RS.Read()
    					MonClient.getFromID(Integer.Parse(RS("SDA_ClientID").ToString))
    					RS.Close()
     
    					For Each File In MyFiles
    						'On traite le fichier
    						Console.Write("> Info: Copie du fichier " & File & ":")
    						downloadFichier("ftp://" & Client.Hostname & "/DOSSIER_IN/" & SDA & "/" & File, System.Environment.CurrentDirectory & "/tmp", Client.Username, Client.Password)
    						Console.WriteLine(" OK")
     
    						'On créer les dossiers si on en a besoin
    						Console.Write("> Info: Création des répertoires (" & MonClient.GUID & "):")
    						creerRepertoire("ftp://00.00.00.00/WEBSITE/clients/" & MonClient.GUID & "/in", "admin", "root")
    						Console.WriteLine(" OK")
     
    						'On l'upload, qu'il soit dispo sur le site.
    						Console.Write("> Info: Upload du fichier :")
    						uploadFichier(System.Environment.CurrentDirectory & "/tmp", "ftp://84.37.14.68/POSTAVENUE/SITE/clients/" & MonClient.GUID & "/in/" & File, "admin", "root")
    						Console.WriteLine(" OK")
     
    						Console.Write("> Info: Suppression du fichier temporaire :")
    						System.IO.File.Delete(System.Environment.CurrentDirectory & "/tmp")
    						Console.WriteLine(" OK")
     
    						Console.Write("> Info: Suppression du fichier distant :")
    						removeFichier("ftp://" & Client.Hostname & "/DOSSIER_IN/" & SDA & "/" & File, Client.Username, Client.Password)
    						Console.WriteLine(" OK")
     
    						Console.Write("> Info: Ajout des infos dans la base :")
     
    						Dim SQLInsert As System.Data.SqlClient.SqlCommand = oConnectionInsert.CreateCommand()
    						SQLInsert.CommandText = "INSERT INTO TBL_SDAIN (SDAIN_ClientID, SDAIN_Fichier, SDAIN_Emeteur) VALUES (" & MonClient.ID & ", '" & File & "', '123')"
     
    						If SQLInsert.ExecuteNonQuery() > 0 Then
    							Console.WriteLine(" OK")
    						Else
    							Console.WriteLine(" Echec")
    						End If
     
     
    						Console.WriteLine()
    					Next
    				Else
    					RS.Close()
    					Console.WriteLine("> Erreur: Impossible de trouver le client associé !")
    				End If
    			End If
    		Else
    			Console.WriteLine(".")
    		End If
    	Next
    End Sub
    Et la methode ou à lieu l'erreur :

    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
        Public Function listeFichiers(ByVal serveurCible As String, ByVal identifiant As String, ByVal motDePasse As String) As Array
            Dim monResponseStream As Stream = Nothing
            Dim monStreamReader As StreamReader = Nothing
            Dim monResultat As Array = Nothing
            ' Instanciation de deux Uri qui vont contenir les chemins source et destination
            Dim monUriServeur As New System.Uri(serveurCible)
            ' Vérification de la validité de l'Uri du fichier sur le serveur FTP
            If Not (monUriServeur.Scheme = Uri.UriSchemeFtp) Then
                'MessageBox.Show("L'Uri du serveur FTP n'est pas valide", "Une erreur est surevnue", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                'Si Uri non valide, arrêt du listage
                Return monResultat
                Exit Function
            End If
            Try
                ' Création de la requête de récupération de la liste des fichiers
                Dim maRequeteListe As FtpWebRequest = CType(WebRequest.Create(monUriServeur), FtpWebRequest)
                maRequeteListe.Method = WebRequestMethods.Ftp.ListDirectoryDetails
                ' Vérification de la présence des identifiants d'un compte, si aucun alors
                ' la connexion se fait en mode anonyme
                If Not identifiant.Length = 0 Then
                    Dim monCompteFtp As New NetworkCredential(identifiant, motDePasse)
                    maRequeteListe.Credentials = monCompteFtp
                End If
                'Console.WriteLine(maRequeteListe.GetRequestStream.ToString)
     
                ' Récupération de la liste de fichiers
                Dim maResponseListe As FtpWebResponse = CType(maRequeteListe.GetResponse, FtpWebResponse)
     
                ' Placement du flux provenant du serveur dans un streamreader
                monStreamReader = New StreamReader(maResponseListe.GetResponseStream, Encoding.Default)
                ' Lecture du stream reader
                Dim listeBrute As String = monStreamReader.ReadToEnd
                ' Découpage de chaque fichier dans la liste concaténée de fichiers
                Dim separateur() As String = {Environment.NewLine} ' -> retour chariot
                ' Découpage et récupération des noms de fichiers
                Dim tableauListe() As String = listeBrute.Split(separateur, StringSplitOptions.RemoveEmptyEntries)
                Dim listeFinale As New List(Of String)
                ' Lecture du tableau et tri des noms de fichiers
                Dim i As Integer = 0
                While i < tableauListe.Length
                    ' Les répertoires se différencient des fichiers par le fait que  
                    ' la chaîne que l'on récupère commence par un "d".
                    If Not tableauListe(i).StartsWith("d") Then
                        ' On place les noms de fichiers dans une liste
                        listeFinale.Add(tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1))
                    End If
                    i += 1
                End While
                monResultat = listeFinale.ToArray
                'MessageBox.Show("Liste terminée")
                ' Gestion des exceptions
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            Finally
                ' Fermeture des différents flux utilisés
                If monResponseStream IsNot Nothing Then
                    monResponseStream.Close()
                End If
                If monStreamReader IsNot Nothing Then
                    monStreamReader.Close()
                End If
            End Try
            Return monResultat
        End Function
    Je suis tenté de dire que l'erreur vient du serveur, car le code fonctionne sen test, mais je ne suis pas sur... Quelqu'un pourrait m'éclairer ?

    ++
    A

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 39
    Par défaut
    Personne n'a d'idée ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 39
    Par défaut
    Après de nouveaux tests, j'ai changé de serveur de production (plutôt simple quand on peut le faire...), et le problème n'existe plus.

    PS: Apparement, c'est un problème qui touche tous les AS/400...

    En revanche si quelqu'un à une idée, il est toujours le bienvenu.

    ++
    A.

Discussions similaires

  1. ASP.NET et FTP
    Par le_misterioso dans le forum ASP.NET
    Réponses: 1
    Dernier message: 03/11/2011, 16h06
  2. Réponses: 0
    Dernier message: 21/06/2011, 16h23
  3. [VB.NET] Classe FTP
    Par Bal1n dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/11/2007, 22h07
  4. [VB.NET] transfert FTP via commande DOS
    Par HULK dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/04/2006, 16h45
  5. NET::FTP unknown error sans raison
    Par niocco dans le forum Modules
    Réponses: 11
    Dernier message: 29/06/2005, 20h21

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