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ß
HellsgoreEDIT:
ahhh, hier wahrscheinlich her:
http://dotnet-snippets.de/dns/datei-auf-einen-ftp-uploaden-SID494.aspxMach 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.