【问题标题】:FtpWebRequest.GetRequestStream hang up and fails.FtpWebRequest.GetRequestStream 挂断并失败。
【发布时间】:2011-07-30 00:20:28
【问题描述】:

我已经编写了一个网络服务,简而言之,它使用 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 上服务的权限

【问题讨论】:

  • 万一其他人偶然发现...我也遇到了同样的问题,但是当我更改为 UsePassive = True 时,它​​解决了我的问题。

标签: vb.net windows-services ftpwebrequest


【解决方案1】:

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

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

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

【讨论】:

  • 你绝对正确,但我确实让我的凭据为此工作。我相信我只是出于示例目的而更改了它。我终于发送了文件,但我在另一端得到了 0 个字节。我设置了断点,文件被转换为字节,但未能完整地发送到 ftp 服务器。
  • 抱歉,我没有注意到我从未接受您的回答。我最终获得了可以工作的凭据,但是通过所有路由器和交换机发生了一些事情,我最终在另一边得到了一个 0 字节的文件。第二组凭据覆盖了第一组,因此不是拼写错误。我想我只是在尝试。我正在创建文件的目录上创建文件夹,但是当我的代码尝试通过线路传输字节时,它最终在另一端得到一个 0 字节文件。不过它的名字是对的,哈哈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 2015-04-28
  • 2021-08-02
  • 1970-01-01
相关资源
最近更新 更多