2017-01-19 3 views
0

다음 코드를 사용하여 FTP 서버에서 파일을 다운로드하고 있습니다. 그러나 무엇을하더라도, 나는 항상 타임 아웃 메시지를 받는다.Axapta 2012 - 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(); 
      } 
+0

하면, 배치 서버에서 AX 코드를 실행을? 'myserver.com'이름, 닫힌 포트 번호 21/방화벽 설정 (및 'C : \ temp \'경로가 존재하지 않을 수도 있음)을 해결할 수없는 등의 차이가있을 수 있습니다. –

답변

0

한번에 사용하거나이 방법을 채택 : 로컬 컴퓨터에서 C# 코드를 실행하는 동안

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; 
    } 
} 
관련 문제