Announcement

Collapse
No announcement yet.

ftpWebRequest: Stream bricht nach 91 Sekunden ab

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ftpWebRequest: Stream bricht nach 91 Sekunden ab

    Hallo zusammen,

    ich habe da ein merkwürdiges Problem und finde einfach keine Lösung, auch nicht beim Suchanbieter meines Misstrauens :-) . Vielleicht habe ich aber auch einfach nur vor lauter debuggen und Fehlersuche mittlerweile ein Brett vor dem Kopf.

    Folgende Geschichte: ich lade über eine Funktion eine Datei auf einen FTP-Server hoch. Aktuell habe ich den FTP-Server hier lokal zum Testen installiert (FileZilla) und die Uploadgeschwindigkeit auf 80kb/s gedrosselt. Bei kleinen Dateien funktioniert alles fein, aber nun habe ich eine 8MB große Datei, und hier bricht der Upload nach 91 Sekunden ab - in den Stream kann nicht geschrieben werden, weil der Host die Verbindung getrennt hat. Lade ich die gleiche Datei mit dem Client von FileZilla auf den FTP-Server, funktioniert es, von daher sollte der Server richtig konfiguriert sein (Thema Timeout).

    Vielleicht seht ihr ja das, was mir entgeht ... ich habe hier mal den Kern der Funktion eingefügt.

    ...schnipp...
    [highlight=vbnet]

    Dim fileStream As FileStream = Nothing
    Dim requestStream As Stream = Nothing
    Dim uploadResponse As FtpWebResponse = Nothing
    Dim ftpUploadRequest As FtpWebRequest = FtpWebRequest.Create(parUploadUri)
    '_ftpUploadRequest = FtpWebRequest.Create(parUploadUri)
    ftpUploadRequest.KeepAlive = True
    ftpUploadRequest.UseBinary = True

    If Not parLocalFilePath.EndsWith("\") Then parLocalFilePath &= "\"
    ftpUploadRequest.Credentials = _cred
    ftpUploadRequest.Method = WebRequestMethods.Ftp.UploadFile

    Try
    uploadResponse = ftpUploadRequest.GetResponse
    requestStream = ftpUploadRequest.GetRequestStream

    Try
    fileStream = File.Open(parLocalFilePath & parLocalFile, FileMode.Open)
    If visual Then RaiseEvent FileLengthCounted(Me, New bhsMiniFTPEventArgs(parLocalFile, fileStream.Length))
    Catch ex As Exception
    If visual Then
    MsgBox(ex.Message)
    Else
    Console.WriteLine("Fehler: FileToFTP, " & parLocalFile)
    Console.WriteLine(ex.Message)
    End If

    Return ok
    End Try

    Dim buffer(1023) As Byte
    Dim bytesRead As Integer = 0
    bytesRead = fileStream.Read(buffer, 0, buffer.Length)
    While bytesRead > 0
    requestStream.Write(buffer, 0, bytesRead)
    bytesRead = fileStream.Read(buffer, 0, buffer.Length)
    If visual Then RaiseEvent BytesTransferred(Me, New bhsMiniFTPEventArgs(parLocalFile, bytesRead))
    End While

    requestStream.Close()
    uploadResponse = ftpUploadRequest.GetResponse
    RaiseEvent FileUploaded(Me, New bhsMiniFTPEventArgs(parLocalFile, 0))
    ok = True
    Catch ex As UriFormatException
    MsgBox(ex.Message)
    ok = False
    Catch ex As IOException
    MsgBox(ex.Message)
    ok = False
    Catch ex As WebException
    MsgBox(ex.Message)
    ok = False
    Finally
    If uploadResponse IsNot Nothing Then
    uploadResponse.Close()
    End If
    If fileStream IsNot Nothing Then
    fileStream.Close()
    End If
    If requestStream IsNot Nothing Then
    requestStream.Close()
    End If
    If uploadResponse IsNot Nothing Then
    uploadResponse.Close()
    End If
    'If _ftpUploadRequest IsNot Nothing Then
    ' If _ftpUploadRequest.KeepAlive Then
    ' _ftpUploadRequest.Abort()
    ' End If
    ' _ftpUploadRequest = Nothing
    'End If
    End Try
    [/highlight]
    ...schnipp...


    Ich geh mir jetzt mal den Kopf weiter kratzen und freue mich auf Feedback

    Gruß

    Caddy
    Zuletzt editiert von CaddyM; 03.09.2012, 08:46.

  • #2
    Hallo,

    ok, heute nochmal mit etwas klarerem Kopf getestet; am Code liegt es nicht - ich habe eben das Speedlimit für den FTP Server rausgenommen und dann läuft es durch. Ist also wohl eher ein FileZilla-Problem, von daher ist das Thema dann erledigt.

    Gruß

    Caddy

    Edit: Doch noch nicht ...
    Zuletzt editiert von CaddyM; 04.09.2012, 13:48. Reason: Problem noch da

    Comment


    • #3
      Und wieder Hallo,

      ja, nun habe ich das mal mit einem "echten" FTP Server getestet (Strato) - auch dieser bricht die Kommunikation ab. Gleiche Datei, gleicher Zeitpunkt. Irgendwas übersehe ich, aber was?!? Immer die gleiche Meldung "In die Übertragungsverbindung können keine Daten geschrieben werden: eine vorhandene Verbindung wurde vom Remotehost geschlossen".

      Gruß

      Caddy

      Comment


      • #4
        Das Beispiel hier

        http://msdn.microsoft.com/de-de/libr...10%29.aspx#Y95


        für einen Upload ist etwas komplexer aufgebaut. Vielleicht das mal annalog testen
        Christian

        Comment


        • #5
          Ja - verflixt nochmal, manchmal hilft länger lesen ja doch :-) - ich hab den Übeltäter entdeckt:

          [highlight=vbnet]
          If Not parLocalFilePath.EndsWith("\") Then parLocalFilePath &= "\"
          ftpUploadRequest.Credentials = _cred
          ftpUploadRequest.Method = WebRequestMethods.Ftp.UploadFile

          Try
          'uploadResponse = ftpUploadRequest.GetResponse
          requestStream = ftpUploadRequest.GetRequestStream

          Try
          [/highlight]

          Mit der ehemaligen Anforderung des Response habe ich dem FTP Server wohl "alles erledigt" signalisiert und lief entsprechend dann in einen Timeout. Ich habe die Zeile auskommentiert, jetzt funktioniert es.

          Danke sehr :-)

          Gruß

          Caddy

          Comment

          Working...
          X