FtpWebRequest.GetRequestStream挂起并失败。

时间:2011-07-30 00:20:29

标签: vb.net windows-services ftpwebrequest

我已经编写了一个Web服务,简而言之,它使用openpop来获取电子邮件,将内容插入到数据库中并保存作为图像的附件。当我在本地保存图像时,它工作正常,它确实如此。现在增加的要求是将图像保存到FTP目录,因此我可以动态创建我的文件夹(它们是基于时间戳创建的)并且运行良好。我的问题来自于我尝试将它们保存到ftp时。是的我的用户名和密码是正确的,否则我不会创建目录。

Private Sub UploadFile(ByVal fileToSave As FileInfo, ByVal path As String)
    Dim UploadRequest As FtpWebRequest = DirectCast(WebRequest.Create("ftp://UserName:Passowrd@999.99.999.9" & path), FtpWebRequest)
    UploadRequest.Credentials = New NetworkCredential("PicService", "grean.matching18")
    UploadRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
    UploadRequest.UseBinary = True
    UploadRequest.UsePassive = True

    ' Const BufferSize As Integer = 2048
    ' Dim content(BufferSize - 1) As Byte, dataRead As Integer
    Dim bFile() As Byte = System.IO.File.ReadAllBytes(fileToSave.ToString)
    'UploadRequest.ContentLength = content.Length

    Using FileStream1 As FileStream = fileToSave.OpenRead()
        Try
            'open request to send
            Using RequestStream As Stream = UploadRequest.GetRequestStream

            End Using
        Catch ex As Exception
        Finally
            'ensure file closed
            FileStream1.Close()
        End Try
    End Using
End Sub

我也尝试过使用Passive False和Binary False,我对堆栈跟踪进行了更多的研究。 并找到this article但尚无解决方案。任何输入都将受到赞赏,我也posting another question on windows services针对不同的问题。如果您想拍摄它,另一个问题不是ftp,而是Windows Server 2003上的服务权限

1 个答案:

答案 0 :(得分:2)

这可能不是解决方案,但我发现URI字符串必须“恰到好处”,而“恰到好处”的内容因ftp服务器而异。

所以ftp://server/directory/file适用于某些服务器,但需要ftp://server//directory/file才能在其他服务器上工作(请注意服务器名称后面的双斜杠)

Aso,您的URI的密码错误拼写错误:ftp://UserName:Passowrd@999.99.999.9并且您也在单独的代码行中提供凭据。