2016-03-22 4 views
0

Ich arbeite an einem Projekt, das einige Informationen in einer .CSV-Datei sammelt und dann die Datei an einen FTP-Server sendet.C# Warum funktioniert der FTP-Upload nur manchmal?

Das Programm sendet die Datei erfolgreich manchmal, aber auch andere Zeiten es hält nur und führt den Fehler:

Eine nicht behandelte Ausnahme des Typs ‚System.Net.WebException‘ in System.dll aufgetreten

Zusätzliche Informationen : Der Remote-Server hat einen Fehler zurückgegeben: 227 Passiver Modus (192,168,10,170,216,244) eingeben

Kann jemand etwas entdecken, das ich falsch gemacht habe?

Vielen Dank im Voraus.

Hier ist mein Code

 private void sendFile_Click(object sender, EventArgs e) 
    { 
     Upload("ftp://100.64.44.12", "UsernameHere", "PasswordHere", @"C:\Users\Kasper\Documents\testFolder\data.csv"); 
    } 

    public void Upload(string FTPAddress, string username, string password, string filePath) 
    { 
     FileStream stream = File.OpenRead(filePath); 
     byte[] buffer = new byte[stream.Length]; 
     stream.Read(buffer, 0, buffer.Length); 
     stream.Close(); 

     FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(FTPAddress + "/" + 
     Path.GetFileName(filePath)); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 

     request.Credentials = new NetworkCredential(username, password); 
     request.UsePassive = true; 
     request.UseBinary = false; 
     request.KeepAlive = true; 

     StreamReader sourceStream = new StreamReader("testfile.txt"); 
     byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
     sourceStream.Close(); 
     request.ContentLength = fileContents.Length; 

     Stream requestStream = request.GetRequestStream(); 
     requestStream.Write(fileContents, 0, fileContents.Length); 
     requestStream.Close(); 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

     MessageBox.Show("Upload File Complete, status {0}", response.StatusDescription); 

     response.Close(); 
    } 
+0

auf den Passiv-Modus verlassen. 500 Serverfehler treten auf, wenn der Server nur passive Verbindungen zulässt. Holen Sie sich die Spur von system.net Sie finden dort etwas, warum der Fehler aufgetreten ist. Normalerweise ist es eine Firewall. – vendettamit

+0

[Protokollierung aktivieren] (http://StackOverflow.com/q/9664650/850848) und zeigen Sie uns eine Protokolldatei sowohl für den erfolgreichen Upload als auch den fehlgeschlagenen. –

Antwort

-1

Versuchen Sie, FtpWebRequest.UsePassive = false

+0

Stream requestStream = request.GetRequestStream(); –

+0

Diese Zeile ruft diesen Fehler ab Eine nicht behandelte Ausnahme vom Typ 'System.Net.WebException' ist in System.dll aufgetreten Weitere Informationen: Der Remoteserver hat einen Fehler zurückgegeben: (500) Syntaxfehler, Befehl nicht erkannt. –

+0

@KasperHansen Aktivieren Sie die Ablaufverfolgung für 'System.net' [Anweisungen hier] (https://blogs.msdn.microsoft.com/dgorti/2005/09/18/using-system-net-tracing/) und veröffentlichen Sie die Trace-Informationen, wenn diese Ausnahme auftritt. – vendettamit

Verwandte Themen