2017-01-19 32 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

ローカルマシン上のC#のコードを実行しながら、あなたは、バッチサーバからAXのコードを実行していますか? 'myserver.com'の名前、ポート番号21 /ファイアウォールの設定(および 'C:\ temp \'ルートが存在しない可能性があります)を解決できないなどの違いがあります。 –

答えて

0

この方法を使用するか、または採用するようにしてください:

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; 
    } 
} 
関連する問題