【发布时间】:2017-09-21 12:25:35
【问题描述】:
我正在尝试将文件上传到第 3 方 FTP 服务器。它在大多数情况下是成功的,但有时可能会持续几分钟而失败。当我调用GetRequestStream() 并且消息是Unable to connect to the remote server 时引发异常,没有内部异常或其他信息。我的请求的超时设置为 100000,但在 20 秒左右的某个时间引发了异常。
我还记录了请求时 FTP 服务器的 IP 地址,我看到相同的 IP 地址有时会工作,有时会无法连接,所以我认为这不是防火墙问题。
此Upload 方法用作使用 ASP.NET Web API 的 API 调用的一部分,用户通过此 API 调用触发上传。
代码:
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(hostURI);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["FTPUser"], ConfigurationManager.AppSettings["FTPPW"]);
request.EnableSsl = true;
request.KeepAlive = false;
byte[] fileContents;
using (var readStream = System.IO.File.OpenRead(pathToFile))
{
fileContents = new byte[readStream.Length];
readStream.Read(fileContents, 0, fileContents.Length);
readStream.Close();
}
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
response.Close();
}
catch (Exception e)
{
Debug.WriteLine("Message: " + e.Message + ", Stack Trace: " + e.StackTrace + ", Inner Exception: " + e.InnerException);
}
例外:
System.Net.WebException:无法连接到远程服务器 System.Net.FtpWebRequest.GetRequestStream() 在 PGServer.Helpers.FTPHelper.Upload(String pathToFile, String ftpFolderName, String newFileName)
【问题讨论】:
-
当您无法使用您的代码传输文件时,您是否可以使用独立的 FTP 客户端在相同的两台机器之间传输文件?
-
@MartinPrikryl 很难捕捉上传在代码中不起作用的时间范围,但我确实尝试在代码中请求失败后立即使用 filezilla 连接和上传,我没有任何问题。但是,我尝试在 filezilla 成功后再次从代码中发送,并且成功了,所以很难说这是否是一个好的测试。
-
如果没有这些信息,就很难判断问题所在。
-
@MartinPrikryl 我只是尝试一个接一个地发送 2 个请求(通过在不到 1 秒的时间内调用我的 API 方法两次),一个成功,一个失败。不确定这是否有帮助。其他时候,他们都成功地紧跟在另一个之后。
-
您是否尝试使用某些可编写脚本的 FTP 客户端(例如 WinSCP)编写频繁的连接/上传/断开连接脚本?检查您是否遇到同样的问题。
标签: c# asp.net asp.net-web-api ftp ftpwebrequest