ファイルコピー後にタイムアウト |
- 日時: 2008/02/28 17:42
- 名前: ゆず
- カレントディレクトリの取得に引き続きまた問題がおきました。
FTP接続後、複数のファイルを順にコピーしていきますが、ファイルコピー後にタイムアウトになってしまいます。
▼こんな感じにコーディングしました▼ '接続用の情報作成 Dim bp As New TKFP.Net.BasicFtpLogon(a_UserName, a_PassWord) 'POPクライアントクラスの定義 FtpClient = New TKFP.Net.FtpClient(bp, a_ServerName, 21) 'パッシブモードに設定 FtpClient.ConnectionMode = TKFP.Net.ConnectionModes.Passive 'リストの取得コマンドを設定 FtpClient.ListType = TKFP.Net.ListType.LIST '取得したリスト情報の有効時間を設定 FtpClient.ListCacheValidityInterval = 60 FtpClient.FileSystemCacheValidityInterval = 60 'LIST情報の解析クラスを指定 FtpClient.ListDataLoader = New TKFP.IO.UnixListDataLoader
'モニタ表示のために送受信イベントを登録 AddHandler Me.FtpClient.MessageReceive, AddressOf Me.FtpClient_MessageReceive AddHandler Me.FtpClient.MessageSend, AddressOf Me.FtpClient_MessageSend
'接続開始 FtpClient.Connect()
'FTP接続時のカレントパス取得 Me.m_CurrentDir = Me.FtpClient.StartPath & "/" & カレントDIR以下のパス '作業ディレクトリの設定 CurrentDirectory = New TKFP.IO.DirectoryInfo(Me.FtpClient, Me.m_CurrentDir) -------ここまでは問題ないです------------------------------------------------------------ -------【ここからが問題のロジックです】----------------------------------------------------- ▼以下ファイル分LOOP ※処理するファイルは複数あります Try 'ファイル一覧取得 Dim a_file As TKFP.IO.FileInfo 'カレントディレクトリ直下のファイルを検索し一致したらコピーする For Each a_file In CurrentDirectory.GetFiles() If a_file.Name = "検索対象のファイル" Then a_file.CopyTo("コピー先パス", True) '→コピー成功 Exit Sub End If Next a_file '→ファイル無し Catch ex As Exception '→処理異常 MSGBOX(ex) End Try
|
|
ファイルコピー後にタイムアウト(続き) ( No.1 ) |
- 日時: 2008/02/28 17:43
- 名前: ゆず
- 簡単に説明しますと、接続に関しては上半分で行い、その接続を保ちつつ、下半分の
コピー処理をどんどんやっていく流れとなっています。 コピーのファイル数は複数あり、大きさは小さいものは30MB〜大きいものは500MBくらいあります。 30MBのファイルに関しては複数あった場合も、順次コピーを正常に行えます。
問題がおきているのは170MBのファイル(500MBもNG)で、1ファイルのコピーには3〜4分かかるのですが、処理が終わった直後、エラーになります。 VB.NET内のExceptionにて取得したところ、 「サーバーからのレスポンスがありませんでした。」 「通信はタイムアウトしました。」 と言われますが、その対象だったファイルのコピーはされています。
下記はFTPが吐き出しているログです。 ------------------------------------------------------------------------------------- 220 (vsFTPd 2.0.1) USER QQQQQ 331 Please specify the password. PASS ******** 230 Login successful. PWD 257 "/AA/BB/CC" CWD /AA/BB/CC/DD/EE/ 250 Directory successfully changed. PASV 227 Entering Passive Mode (○○,○○,○○,○○,○○,○○) LIST 150 Here comes the directory listing. 226 Directory send OK. TYPE I 200 Switching to Binary mode. PASV 227 Entering Passive Mode (○○,○○,○○,○○,○○,○○) RETR FILE0001 150 Opening BINARY mode data connection for FILE0001 (180000000 bytes). ←@ PASV PASV PASV QUIT -------------------------------------------------------------------------------------
上記@のあと、正常だとおそらく下記のように処理が次のファイルに移るようなのですが.. PASV?PASV??って感じになってますが何でしょう(^^; ------------------------------------------------------------------------------------- 226 File send OK. TYPE I 200 Switching to Binary mode. PASV 227 Entering Passive Mode (○○,○○,○○,○○,○○,○○) RETR FILE0003 150 Opening BINARY mode data connection for FILE0003 (30000000 bytes). -------------------------------------------------------------------------------------
ファイルのコピー処理としては、1ファイルのみですが正常に作成されるがその直後にタイムアウトになってしまう、これを回避する方法があればご教授くださいm(__)m
|
Re: ファイルコピー後にタイムアウト ( No.2 ) |
- 日時: 2008/02/28 22:21
- 名前: Toki◆pRU.c9X.EOI
- ご報告ありがとうございます
制御コネクションでの処理で、データコネクションでの通信時間が長い時にタイムアウトと判定する不具合があるかもしれませんが、まだ調査できていません。
FtpClient.TimeOutIntervalプロパティを大きめにして、タイムアウトの制限を緩和してみてください。
多分、同様の現象をテスト環境で再現できそうなので、時間が出来次第修正させていただきます。
|
Re: ファイルコピー後にタイムアウト ( No.3 ) |
- 日時: 2008/02/29 11:33
- 名前: ゆず
- ご返答ありがとうございますm(__)m
>FtpClient.TimeOutIntervalプロパティを大きめにして、タイムアウトの制限を緩和してみてください。
試しに「FtpClient.TimeOutInterval=1200(20分)」で設定してリトライしてみました。 結果はほぼ変わらず、処理が返ってくる時間が20分くらい伸びただけで、VBのタイムアウトエラー、FTPのログ内容は変わらなかったです。 これは推測ですが、ファイルコピーの完了後20分経過してからVB側に処理が戻りタイムアウトエラーになっている気がします。
宜しくお願いしますm(__)m
|
Re: ファイルコピー後にタイムアウト ( No.4 ) |
- 日時: 2008/03/13 00:41
- 名前: Toki◆pRU.c9X.EOI
- 返信が滞っていて申し訳ありません。
引越しで、開発PC、テスト用サーバーが動かせないので、
開発環境が復旧次第、同条件でのテストと修正を行なう予定です。
もうしばらくお待ちください
|
|
|