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
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
Comment