FTP-Upload

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Memo.

    FTP-Upload

    Hallo Leute,
    ich habe wieder mal ein Problem mit meinem Programm (oder mit dem FTP-Server?) und zwar
    will ich Dateien hochladen (Der Klassiker.) das gelingt auch sehr gut bis zum dritten Upload:

    VB.NET-Quellcode

    1. 'Dateien schreiben
    2. 'Ftpreq umstellen
    3. ftpreq = FtpWebRequest.Create(ftp_folder & Username.ToUpper & "/username.txt")
    4. ftpreq.Credentials = cred
    5. ftpreq.Method = WebRequestMethods.Ftp.UploadFile
    6. Dim webstr As New StreamWriter(ftpreq.GetRequestStream)
    7. webstr.Write(Username)
    8. 'Ftpreq umstellen
    9. ftpreq = FtpWebRequest.Create(ftp_folder & Username.ToUpper & "/password.txt")
    10. ftpreq.Credentials = cred
    11. ftpreq.Method = WebRequestMethods.Ftp.UploadFile
    12. Dim webstr2 As New StreamWriter(ftpreq.GetRequestStream)
    13. webstr2.Write(Password)
    14. 'Ftpreq umstellen
    15. ftpreq = FtpWebRequest.Create(ftp_folder & Username.ToUpper & "/name.txt")
    16. ftpreq.Credentials = cred
    17. ftpreq.Method = WebRequestMethods.Ftp.UploadFile
    18. Dim webstr3 As New StreamWriter(ftpreq.GetRequestStream)
    19. webstr3.Write(Username & " ")
    20. 'Ftpreq umstellen
    21. ...

    Beim "Namen" will mein Programm nicht mehr und wirft eine WebException
    Fehlertext

    Quellcode

    1. System.Net.WebException wurde nicht behandelt.
    2. Message="Timeout für den Vorgang wurde überschritten."
    3. Source="System"
    4. StackTrace:
    5. bei System.Net.FtpWebRequest.CheckError() bei System.Net.FtpWebRequest.GetRequestStream() bei tcplib.UserManagement.VTAccount.Create(String Username, String Password, String mail) in C:\Users\Benutzername\Documents\Visual Studio 2008\Projects\Projektname\tcplib\tcplib\UserManagement.vb:Zeile 105. bei TestApp.Form1.Button1_Click(Object sender, EventArgs e) in C:\Users\Benutzername\Documents\Visual Studio 2008\Projects\Projektname\tcplib\TestApp\Form1.vb:Zeile 4. bei System.Windows.Forms.Control.OnClick(EventArgs e) bei System.Windows.Forms.Button.PerformClick() bei System.Windows.Forms.Form.ProcessDialogKey(Keys keyData) bei System.Windows.Forms.Control.PreProcessMessage(Message& msg) bei System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg) bei System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg) bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) bei TestApp.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81. bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) bei System.Threading.ThreadHelper.ThreadStart()
    6. InnerException:

    Part One ... wieso dreimal in Folge der gleiche Aufruf nur mit unterschiedlichen Dateinamen? Lagere den Aufruf an sich doch in eine eigene Funktion aus und und rufe die dann mit Übergabe des Files auf. Dann brauchst Du den Code für den Upload nur einmal zu schreiben.

    TimeOut überschritten heisst vermutlich nix anderes als der Upload Deiner zweiten Datei länger dauert und daher der Upload-Vorgang auf die dritte Datei auf eine besetzte Verbindung trifft.

    Wenn Du die Upload-Funktion auslagerst kannst du eine Schleife basteln die solange wartet bis der Upload durchgelaufen ist (musst Dir halt raussuchen wie Du an die Meldung kommst das der Upload fertisch ist) oder Du packst den Upload für jede Datei in einen separaten Thread und startest für jeden Thread eine eigene Verbindung. Wobei ich das aber weniger empfehlen würde da ansonsten die Inet-Verbindung auf dem ausführenden Rechner ziemlich stark strapaziert wird wenn da 3 oder mehr Uploads gleichzeitig laufen.

    Gundsätzlich würde ich vermutlich den kompletten Vorgang in einem eigenen Thread laufen lassen und da drinnen dann die Dateien nacheinander uploaden und innerhalb des Threads dann auf jeden Upload warten bis er fertig ist bevor ich den nächsten Upload anwerfe.

    Mal so meine 5 Cents dazu. ;)

    Gruß

    Rainer

    raist10 schrieb:

    Part One ... wieso dreimal in Folge der gleiche Aufruf nur mit unterschiedlichen Dateinamen? Lagere den Aufruf an sich doch in eine eigene Funktion aus und und rufe die dann mit Übergabe des Files auf. Dann brauchst Du den Code für den Upload nur einmal zu schreiben.
    Das hab ich mir auch schon gedacht, aber wie soll ich denn den Zieluploaddateinamen umändern?

    raist10 schrieb:

    TimeOut überschritten heisst vermutlich nix anderes als der Upload Deiner zweiten Datei länger dauert und daher der Upload-Vorgang auf die dritte Datei auf eine besetzte Verbindung trifft.
    Glaub ich nicht. Der 2te geht in null komma josef :D .
    Und warum geht es dann überhaupt mit dem 2ten Upload? ?(