- - PR -
FTP受信中にエラー
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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)コマンドの不適切なシーケンスです」 と表示されます。 試しに、エラーになったファイルだけを指定するとエラーは表示されません。 何か後処理をちゃんとしないとエラーになるような 事があるのでしょうか? よろしければ、ヒントをお願い致します。 | ||||||||||||
|
投稿日時: 2007-07-05 13:44
接続がひとつで、ひとつ終わってないうちに次のコマンドが送信されるとか?
ないか…。 | ||||||||||||
|
投稿日時: 2007-07-05 19:02
ここでと書いてありますが、 このコードだと、ディレクトリリスティング中ですよね?
大量に処理しているとエラーが出るなら、 ファイルの取得中だと思うんですが、 大量のファイルがあるディレクトリを読むとエラーがでるんでしょうか? それとも、ファイルを取得するたびに ディレクトリ読んでるんでしょうか? もうちょっと情報がないとわかりかねます | ||||||||||||
|
投稿日時: 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 ] | ||||||||||||
|
投稿日時: 2007-07-06 14:22
KeepAliveをfalseにする。
http://www.thescripts.com/forum/thread663337.html | ||||||||||||
|
投稿日時: 2007-07-06 15:43
todoさん、こんにちは
KeepAlive=false で処理は、遅くなりましたがうまくいきました。 ありがとうございます。 でも、毎回セッションを切るのは。。。 なんとなく、しっくりこないので、 他の解決方法がないか、調べてみます。 皆さん、いろいろアドバイス ありがとうございました。 | ||||||||||||
|
投稿日時: 2007-07-06 22:44
伝わりませんでした。 私にはエラー発生の状況がまったく把握できていません。
どこの処理が大量にあるときにどこの処理でエラーを吐くのですか? ある日の処理が大量にあった場合、 次の日のファイル情報を取得しているときにエラーがでるということですか? それともある日の処理が大量にあった場合、 その日のファイル情報取得でエラーがでるのですか?
ディレクトリ情報取得中にエラーが起きるのでしたら、 エラーになったファイルというのは何のことでしょうか? 今回のエラーからすると当然 FTPコマンドの発行順序が問題であろうということはお分かりですよね? でしたら、 FTPコマンドを発行する部分のコード、 それらの発行される順番のわかる部分のコード、 が必要になります。 (もしくは、それがわかるように説明をしてください。) つまり、 ディレクトリ取得部分のコード、 ファイルダウンロード部分のコード、 ループ部分のコードなどを含めた、 最小コードを提示してください。 また、対象サーバーのソフトウェア名やOS名もわかるならば 教えてください。 | ||||||||||||
|
投稿日時: 2007-07-06 22:56
推測です。
もし、他のメジャーなFTPツールでも起きるのならば 長時間つないでいると相手が出すエラーだから仕方ないんじゃない。 |