2011-06-06 14 views
1

私は1000以上のファイルを含むdirecotryからFTPからファイルリストを読み込もうとしています。C#FTP ListDirectory詳細問題

私はこのようにそれを行う:

public static FtpWebRequest GetRequest(string uri) 
    { 
     FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 
     req.Credentials = new NetworkCredential("login", "password"); 
     req.KeepAlive = false; 
     req.UseBinary = false; 
     req.UsePassive = true; 
     return req; 
    } 

    public static bool CheckConnection() 
    { 
     FtpWebResponse respSize = null; 
     try 
     { 
      FtpWebRequest reqFTP = GetRequest(@"ftp://myftp.com"); 
      reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 
      respSize = (FtpWebResponse)reqFTP.GetResponse(); 
      respSize.Close(); 
      respSize = null; 
      reqFTP.GetResponse().Close(); 

      return true; 
     } 
     catch (Exception ex) 
     { 

     //... 
     } 
     finally 
     { 
      if (respSize != null) 
       respSize.Close(); 
     } 
     return false; 
    } 

私はエラーを取得する:

The remote server returned an error:

(451) Local error in processing.

at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)

at System.Net.FtpWebRequest.RequestCallback(Object obj)

at System.Net.CommandStream.Dispose(Boolean disposing)

at System.IO.Stream.Close()

at System.IO.Stream.Dispose()

at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)

at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)

at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)

at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)

at System.Net.FtpWebRequest.RequestCallback(Object obj)

at System.Net.CommandStream.Abort(Exception e)

at System.Net.CommandStream.CheckContinuePipeline()

at System.Net.FtpWebRequest.DataStreamClosed(CloseExState closeState)

at System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState closeState)

at System.Net.FtpDataStream.Dispose(Boolean disposing)

at System.IO.Stream.Close()

at System.Net.FtpWebResponse.Close()

at CheckConnection()

は、誰もが何が起こっているか知っていますか? RhinoSoft(FTPソフトのServ-Uのメーカー)から

よろしく マルチン

+0

少数のファイルでも動作しますか? –

+0

はい、少数のファイルで動作します – Marcin

答えて

1

を:

"A 451 reply code may be sent in response to any command initiating a file transfer. It is a transient negative response, which means the error condition is a temporary one. It is usually sent in response to the server encountering an unexpected local error when processing data it is transferring or receiving. In this case, the client is encouraged to restart the FTP transaction and try again." [1]

だから、それは必ずしも、お使いのソフトウェアとFTPサーバ間の通信で問題になる可能性がありあなたのソフトウェア自体の問題。

プロパティの長さを増やすことはできません。FtpWebRequestですが、これは私の研究に基づいた原因ではありません。

+0

あなたは何か考えていますか?この「一時的な」問題が毎回発生します。 管理者が設定しなければならないサーバー上にいくつかのフラグがありますか? – Marcin

+0

私はタイムアウトを2倍にしました。私はそれが問題ではないと思います... – Marcin

+0

2000年のファイルを持つFTPサーバーに対してコードをテストしました。残念ながら、このエラーはかなり一般的で、FTPサーバ上で生成されています。ソフトウェアでは生成されていません。最善の策は、サーバーの所有者と一緒に作業することです。標準のFTPクライアントに問題はありますか? –

関連する問題