- PR -

FTP受信中にエラー

投稿者投稿内容
のん吉
会議室デビュー日: 2007/07/05
投稿数: 8
投稿日時: 2007-07-05 12:21
はじめまして、のん吉と言います。

はじめての書き込みですので、書き方が悪かったら
教えて下さい。

C#(VS2005)で開発をしています。

現在、FTPサーバーから日付+連番のファイルを受信するプログラムを作っています。
手順として
1.サーバーのファイル情報を取得(日付*.txt)
2.取得したファイル数分、ダウンロード
3.日付を次の日にして、と繰り返し、1と2を実行する形になっています。

少ない件数だと?エラーが発生しないのですが、
大量に処理をしているとエラーが発生してしまいます。

FtpWebRequest req = (FtpWebRequest)WebRequest.Create(uri);
req.Credentials = new NetworkCredential(id,pass);
req.Method = WebRequestMethods.Ftp.ListDirectory;

FtpWebResponse res;
try
{
res = (FtpWebResponse)req.GetResponse();
}
ここで、例外が発生して、
「リモートサーバーがエラーを返しました(503)コマンドの不適切なシーケンスです」
と表示されます。
試しに、エラーになったファイルだけを指定するとエラーは表示されません。

何か後処理をちゃんとしないとエラーになるような
事があるのでしょうか?

よろしければ、ヒントをお願い致します。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-05 13:44
接続がひとつで、ひとつ終わってないうちに次のコマンドが送信されるとか?
ないか…。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-07-05 19:02
引用:

ここで、例外が発生して、



ここでと書いてありますが、
このコードだと、ディレクトリリスティング中ですよね?


引用:

大量に処理をしているとエラーが発生してしまいます。



大量に処理しているとエラーが出るなら、
ファイルの取得中だと思うんですが、
大量のファイルがあるディレクトリを読むとエラーがでるんでしょうか?

それとも、ファイルを取得するたびに
ディレクトリ読んでるんでしょうか?

もうちょっと情報がないとわかりかねます
のん吉
会議室デビュー日: 2007/07/05
投稿数: 8
投稿日時: 2007-07-06 10:17
れいさん、こんにちは

引用: --------------------------------------------------------------------------------
大量に処理しているとエラーが出るなら、
ファイルの取得中だと思うんですが、
大量のファイルがあるディレクトリを読むとエラーがでるんでしょうか?
--------------------------------------------------------------------------------
そうなんです。ダウンロード中ではなく
ディレクトリを読むだけでなってしまいます。

引用:--------------------------------------------------------------------------------
それとも、ファイルを取得するたびに
ディレクトリ読んでるんでしょうか?
--------------------------------------------------------------------------------

FTPサーバーには、毎日更新されたデータが何回(不特定)かアップされています。
ファイル名:YYYYMMDDNNN.CSV
 YYYYMMDD:西暦
 NNN:連番←001からアップごとに連番がカウントされる
このため、前回取得した日付から今日まで1日ごとにファイルを検索して
検索にヒットしたファイルをダウンロードする形をとっています。

(FtpWebRequest)WebRequest.Create("ftp://down/yyyymmdd*.CSV");
こんな感じです。
その後、
StreamReader(res.GetResponseStream(),Encodeing.GetEncoding("SHIFT_JIS"));
で、ファイル一覧を取得して
取得したファイルをひとつづつ、ダウンロードしています。

こんな感じで伝わるでしょうか?





[ メッセージ編集済み 編集者: のん吉 編集日時 2007-07-06 10:19 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-07-06 14:22
KeepAliveをfalseにする。

http://www.thescripts.com/forum/thread663337.html
のん吉
会議室デビュー日: 2007/07/05
投稿数: 8
投稿日時: 2007-07-06 15:43
todoさん、こんにちは

KeepAlive=false

で処理は、遅くなりましたがうまくいきました。
ありがとうございます。

でも、毎回セッションを切るのは。。。
なんとなく、しっくりこないので、
他の解決方法がないか、調べてみます。

皆さん、いろいろアドバイス
ありがとうございました。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-07-06 22:44
引用:

こんな感じで伝わるでしょうか?



伝わりませんでした。
私にはエラー発生の状況がまったく把握できていません。

引用:

1.サーバーのファイル情報を取得(日付*.txt)
2.取得したファイル数分、ダウンロード
3.日付を次の日にして、と繰り返し、1と2を実行する形になっています。


どこの処理が大量にあるときにどこの処理でエラーを吐くのですか?

ある日の処理が大量にあった場合、
次の日のファイル情報を取得しているときにエラーがでるということですか?
それともある日の処理が大量にあった場合、
その日のファイル情報取得でエラーがでるのですか?

引用:

試しに、エラーになったファイルだけを指定するとエラーは表示されません。


ディレクトリ情報取得中にエラーが起きるのでしたら、
エラーになったファイルというのは何のことでしょうか?

今回のエラーからすると当然
FTPコマンドの発行順序が問題であろうということはお分かりですよね?
でしたら、
FTPコマンドを発行する部分のコード、
それらの発行される順番のわかる部分のコード、
が必要になります。
(もしくは、それがわかるように説明をしてください。)

つまり、
ディレクトリ取得部分のコード、
ファイルダウンロード部分のコード、
ループ部分のコードなどを含めた、
最小コードを提示してください。

また、対象サーバーのソフトウェア名やOS名もわかるならば
教えてください。
未記入
大ベテラン
会議室デビュー日: 2005/03/12
投稿数: 148
投稿日時: 2007-07-06 22:56
推測です。

もし、他のメジャーなFTPツールでも起きるのならば
長時間つないでいると相手が出すエラーだから仕方ないんじゃない。

スキルアップ/キャリアアップ(JOB@IT)