FTP-Upload-Funktion schließt die Verbindung nicht



  • Hallo,

    ich habe für Dateiupload per FTP eine Funktion geschrieben.
    Der Upload funktioniert. Allerdings kann ich nach dem Ausführen dieser Funktion keine FTP-Verbindung mit einem anderen Programm herstellen.
    Ich muss dann erst mein Programm schließen und kann ich ein anderes Programm benutzen.

    Vielleicht hat jemand eine Idee warum die FTP-Verbindung nicht geschlosen wird?

    private bool Upload(string Target, string Source_Datei)
            {
                bool l_Status_erfolgreich_hochgeladen = true;
                FtpWebRequest request = null;
                StreamReader sourceStream = null;
                Stream requestStream = null;
    
                try
                {
                    // Get the object used to communicate with the server.
                    request = (FtpWebRequest)WebRequest.Create(Target);
                    request.Method = WebRequestMethods.Ftp.UploadFile;
    
                    // Einloggen
                    request.Credentials = new NetworkCredential("username", "password");
    
                    // Copy the contents of the file to the request stream.
                    sourceStream = new StreamReader(Source_Datei);
                    byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                    request.ContentLength = fileContents.Length;
    
                    requestStream = request.GetRequestStream();
                    requestStream.Write(fileContents, 0, fileContents.Length);
    
                    MessageBox.Show("Upload complete");
    
                }
                catch (Exception myexception)
                {
    
                    MessageBox.Show(myexception.Message);
                }
                finally
                {
                    if (sourceStream != null)
                        sourceStream.Close();
                    if (requestStream != null)
                        requestStream.Close();
                }
    
                // Status zurückgeben
                return l_Status_erfolgreich_hochgeladen;
            }
    

    Danke



  • Servus,

    woher hast du denn den Code Schnippsel? Es geht natürlich auch anders, aber das steht hier erstmal nicht zur Debatte. So wie ich das sehe, schließt du zwar den RequestStream aber beendest die Verbindung nicht. Vielleicht ist es schon damit getan, dass du ein FTP "Quit" sendest, danach sollte deine Verbindung getrennt sein. Ist aber nur eine Vermutung...

    gruß
    Hellsgore

    EDIT:
    ahhh, hier wahrscheinlich her:
    http://dotnet-snippets.de/dns/datei-auf-einen-ftp-uploaden-SID494.aspx

    Mach zum Schluß noch ein "request.Abort()" und die Welt ist wieder heile.



  • Danke für den Hinweis. Das wars.
    Ich habe jetzt im Finally-Block folgendes stehen:

    finally
                {
                    if (request != null)
                        request.Abort();
                    if (sourceStream != null)
                        sourceStream.Close();
                    if (requestStream != null)
                        requestStream.Close();                
                }
    

    Der original Snippet ist unter http://msdn.microsoft.com/en-us/library/ms229715.aspx zu finden.


Anmelden zum Antworten