Buongiorno.
Ho un'applicazione VB.Net che effettua via FTP l'upload di alcuni file sul server web dell'utente. Uno di questi utenti ha cambiato provider, passando a Fastweb, e l'upload non funziona più. Da notare però che l'upload funziona regolarmente usando un client FTP come Filezilla.
Questo è un estratto del codice VB.Net (semplificato) che funziona con tutti gli altri provider. (Ignorate le chiamate a ShowProgress che è semplicemente la visualizzazione di una ProgressBar)
Public Function FtpWeb(Filenames As List(Of String)) As Boolean
Try
Dim iX As Integer = 0
Dim sExt As String
Dim iProgressStep As Integer
If Filenames.Count = 0 Then
ShowProgress(0, "Nessun file da trasferire" & Constants.vbCrLf)
Return True
Else
iProgressStep = 100 \ (Filenames.Count * 2)
End If
'Start
ShowProgress(0, Constants.vbCrLf)
For Each FileName In Filenames
Dim request As FtpWebRequest = DirectCast(WebRequest.Create(gsDestPath & "/" & FileName), FtpWebRequest)
request.Method = WebRequestMethods.Ftp.UploadFile
request.Credentials = New NetworkCredential(gsUserName, gsPassword)
request.UsePassive = True
iX += 1
ShowProgress(iProgressStep * iX, "Trasferimento del file " & FileName & "...")
Dim fileContents As Byte()
Using sourceStream As StreamReader = New StreamReader(gsHtmlPath & FileName)
sExt = Path.GetExtension(FileName)
If sExt = ".jpg" OrElse sExt = ".bmp" OrElse sExt = ".png" OrElse sExt = ".gif" Then
fileContents = File.ReadAllBytes(gsHtmlPath & FileName)
Else
fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd())
End If
End Using
Try
Using requestStream As Stream = request.GetRequestStream() '<=== QUI VA IN ERRORE
requestStream.Write(fileContents, 0, fileContents.Length)
End Using
Catch
MessageBox.Show(ex.ToString)
End Try
iX += 1
Using response As FtpWebResponse = CType(request.GetResponse(), FtpWebResponse)
If response.StatusCode = 226 Then
ShowProgress(iProgressStep * iX, " OK" & Constants.vbCrLf)
Else
ShowProgress(iProgressStep * iX, " Non riuscito" & Constants.vbCrLf)
Return False
End If
End Using
Next
Return True
Catch ex As Exception
Log(ex)
Return False
End Try
End Function
L'errore si verifica nella riga evidenziata e la MessageBox nel Catch mostra questo:
Ho cercato e trovato con Google diverse segnalazioni di problemi simili con Fastweb, ma nessuna con soluzione soddisfacente, anche perché, ripeto, Filezilla esegue tranquillamente l'upload.
Grazie a che cercherà di darmi una mano prima di consigliare al mio utente di cambiare nuovamente provider.