【问题标题】:FtpWebResponse error 550 when closing stream on dowloading (Windows Server 2012)下载时关闭流时 FtpWebResponse 错误 550 (Windows Server 2012)
【发布时间】:2015-10-29 13:12:40
【问题描述】:

我已经阅读了很多关于 FtpWebResponse 的 hte 550 问题的消息和问题。但是我遇到的问题非常具体。我第一次尝试下载文件时,没有任何问题。响应返回一个流,我将其保存到文件中。

但是当我尝试为同一个文件第二次调用此方法时,我正在检查我的 PC 上是否已经存在该文件,如果是,我正在尝试关闭流并处理响应。问题是响应和流在 close 方法上抛出 550 错误。

在 Wireshark 中,就在消息“数据连接已打开;传输开始 (125)”之后,我得到了 Windows Server 2012 的 550 答案。如何读取文件一次,而不是仅仅关闭流?

代码序列是这样的:

var request = GetNewDownloadRequest(uri);
try
{
   response = GetFTP(request);
}
catch (WebException e)
{
   throw;
}
Stream stream = response.GetResponseStream();
if (!File.Exists(localPath))
{
   SaveToFile(stream);
}

stream.Close();
response.Close();
stream = File.OpenRead(localPath);

发送请求而不使用它来下载允许我检查文件是否也存在于 FTP 服务器上。

我还比较了我的应用和 Chrome 中的下载量。唯一的区别是Chrome在两者之间使用了CWD命令,所以我使用了MSDN solution with a similar issue,但最终没有帮助。

我想的最后一件事是我从响应中抓取一个流只是为了关闭它。我可以关闭一个流而不读取它的一个字节吗?我可以解析一个流来关闭它吗?

【问题讨论】:

    标签: c# ftp windows-server-2012


    【解决方案1】:

    我目前的解决方案是,您不能同时关闭响应流或调用它们时的响应。清理所有内容的唯一方法是将整个流复制到(例如)MemoryStream,然后您可以关闭两者。

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 2013-12-28
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多