[英]Axapta 2012 - Download file from FTP - timeout
我正在使用以下代码从FTP服务器下载文件。 但是无论如何,我总是收到超时消息。
ftpo = System.Net.WebRequest::Create("ftp://myserver.com/subFolder/filename.txt");
request = ftpo;
credential = new System.Net.NetworkCredential(_user, _password);
request.set_Credentials(credential);
request.set_KeepAlive(false);
request.set_Method(_ftpMethod);
request.set_UsePassive(true);
request.set_UseBinary(true);
request.set_Timeout(600000);
request.set_ReadWriteTimeout(600000);
ftpResponse = request.GetResponse();
response = ftpResponse;
reader = new System.IO.StreamReader(response.GetResponseStream());
if(reader)
{
readString = reader.ReadToEnd();
}
if(readString)
{
writer = new System.IO.StreamWriter(_destination);
writer.Write(readString);
writer.Flush();
writer.Close();
}
错误信息
操作已超时。
该文件为9kB。 通过Filezilla下载文件的时间不到1秒。 超时设置为10分钟。
是什么导致此消息? 关于如何调试它的任何想法(我无法访问FTP服务器)。
更新:在C#中,相同的代码运行良好。
FtpWebRequest ftpRequest;
var request = WebRequest.Create("ftp://server.com/folder/file.txt");
ftpRequest = (FtpWebRequest) request;
request.Credentials = new NetworkCredential("", "");
request.Method = "RETR";
ftpRequest.KeepAlive = false;
ftpRequest.UsePassive = true;
ftpRequest.UseBinary = true;
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
var reader = new StreamReader(response.GetResponseStream());
var result = "";
if(reader != null)
{
result = reader.ReadToEnd();
var writer = new StreamWriter(@"C:\temp\outfile.txt");
writer.Write(result);
writer.Flush();
writer.Close();
}
尝试使用或采用这种方法:
private void downloadFTPFileToLocal(FolderPath _folderName,
FileName _fileName,
FileName fileNameLocal)
{
System.Exception clrException;
Object ftpObject;
System.Net.FtpWebRequest ftpWebRequest;
System.Net.NetworkCredential networkCredential;
System.Net.WebProxy webProxy;
System.IO.Stream stream;
System.IO.StreamReader streamReader;
System.IO.StreamWriter streamWriter;
System.Text.Encoding encoding;
boolean errorFTP;
Filename fileNameLocal;
object ftpWebResponse;
System.Net.FtpWebResponse response;
void closeAll()
{
if (streamReader)
{
streamReader.Close();
}
if (streamWriter)
{
streamWriter.Close();
}
if (stream)
{
stream.Close();
}
if (ftpWebResponse)
{
ftpWebResponse.Close();
}
}
;
try
{
try
{
ftpObject = System.Net.WebRequest::Create(_folderName, _fileName);
ftpWebRequest = ftpObject;
networkCredential = new System.Net.NetworkCredential(FTPLogin, FTPPassword);
ftpWebRequest.set_Credentials(networkCredential);
ftpWebRequest.set_Method(#RETR);
ftpWebRequest.set_Timeout(#TimeOut);
if (Param.FTPMode == FTPMode::Active)
{
ftpWebRequest.set_UsePassive(false);
}
else
{
ftpWebRequest.set_UsePassive(true);
}
if (useProxy)
{
webProxy = System.Net.WebProxy::GetDefaultProxy();
webProxy.set_UseDefaultCredentials(true);
ftpWebRequest.set_Proxy(webProxy);
}
else
{
ftpWebRequest.set_Proxy(new System.Net.WebProxy());
}
ftpWebResponse = ftpWebRequest.GetResponse();
}
catch (Exception::CLRError)
{
if (useProxy)
{
useProxy = false;
retry;
}
else
{
throw Exception::CLRError;
}
}
response = ftpWebResponse;
stream = response.GetResponseStream();
encoding = System.Text.Encoding::get_Default(); // to check encoding
streamReader = new System.IO.StreamReader(stream, encoding);
if (System.IO.File::Exists(fileNameLocal))
{
System.IO.File::Delete(fileNameLocal);
}
streamWriter = new System.IO.StreamWriter(fileNameLocal, false, encoding);
streamWriter.Write(streamReader.ReadToEnd());
streamWriter.Close();
response.Close();
closeAll();
}
catch (Exception::CLRError)
{
clrException = CLRInterop::getLastException();
if (clrException)
{
clrException = clrException.get_InnerException();
if (clrException)
{
error(clrException.get_Message());
}
}
if (useProxy)
{
useProxy = false;
retry;
}
else
{
closeAll();
}
errorFTP = true;
}
catch
{
closeAll();
errorFTP = true;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.