繁体   English   中英

Axapta 2012-从FTP下载文件-超时

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM