Ktouth Brand. on Web

け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト



[2014年06月07日]

FtpWebRequest で GetFileSize しようとして 5xx エラーが出る

2014年06月08日 17:33更新 筆者:K.Ktouth

忘れるとまたハマりそうなので自分メモ。

FTP サーバー側の実装が不完全(限定用途向けの簡易のものとか)だと、.NET4.x 標準の FtpWebRequest では上記のようなエラーが出る問題がある模様。
KB があったので四苦八苦して読んでみると、どうも

  1. 従来(.NET3.5以前)ではアップロード時のコマンド発信に「CWD」でクッションを置いていた。
  2. 本来のFTP通信には不要の処理なので .NET4 以降では省略した。
  3. FTP サーバー側の実装が不完全だと、5xx エラーを吐くことがある。

とのことらしい。サーバー側の問題に起因しているのでMS側としては元に戻したくない。が、対応できなければ使えないライブラリと化すので「回避策」の提示はしてくれている、と言うことかな。
ようはアップロード時などに「CWD」を発行する=以前と同じ挙動にする方法がこの KB のキモらしいです。
ソースコードを見る限りは FTP リクエストクラスが持つプライベート静的フィールド内のフラグ、それを強制的に書き換えて「CWD」発行を行うようにするっていう手法のようです。なるほど…… WebRequestMethods クラス内の各コマンドはただの文字列だと思っていましたが、実際は内部にフラグの山をかかえていたと言うことですか……面倒な!(笑)

とりあえずソフトで FTP 周りを使用する前に上記コードを一度実行してパッチを当ててあげれば問題は回避できるようです。

……後は FTP 転送時の状況経過を受け取る方法ないかなぁ……

本日のリンク元
その他のリンク元
検索