QA@IT

【C#】FtpWebRequestによるダウンロードについて

6410 PV

お世話になります。

マルチポストになりますが、ご容赦ください。
http://okwave.jp/qa/q8937879.html

現在FTPSを用い掲題によるファイルダウンロードアプリ(クライアント)の作成を行っております。
#以下を参考にし、作成させて頂いております。
http://dobon.net/vb/dotnet/internet/ftpwebrequest.html#section1
http://blogs.gine.jp/taka/archives/1377

ですが、GetResponse()でExceptionが発生し、はまっております。。

ポートは990として作成しておりますが、その場合は、プロトコル違反
21とした場合は、受信時に予期しないエラーが
とのExceptionとなります。

解決にご助力頂けますでしょうか。

コードは以下となります

ServicePointManager.ServerCertificateValidationCallback =
    new RemoteCertificateValidationCallback(
            delegate(Object certsender, X509Certificate certificate,
                     X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; });

FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create("ftp://IP:Port/");
ftpReq.Credentials = new NetworkCredential("user", "pass");
ftpReq.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
ftpReq.KeepAlive = false;
ftpReq.EnableSsl = true;
ftpReq.UsePassive = true;
ftpReq.Proxy = null;

FtpWebResponse ftpRes = (FtpWebResponse)ftpReq.GetResponse();

StreamReader sr = new StreamReader(ftpRes.GetResponseStream());
string res = sr.ReadToEnd();
Console.WriteLine(res);
sr.Close();

Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription);

回答

私の場合はFTPですが、以前同じようなことで悩んだ記憶があります。
私が解決した方法なので、sasakama_donさんの解決になるかはわからないですが、下記2点確認してみてはいかがでしょうか。

(1)ファイアウォールの設定
使用したいポートが解放されているかを確認してみてはいかがでしょうか。
FTP アクティブモード パッシブモード | approad

(2)プロキシの設定
ftpWebRequest.proxyはnullでもシステム規定のプロキシを使ってしまうのだったと思いました。
プロキシを使用していると(1)で書きましたファイアウォールの設定がプロキシにも必要になります。
プロキシを使用しない場合はconfigファイルで使用しない設定ができるので、それで解除してみるのはいかがでしょうか。
FtpWebRequest.Proxy プロパティ (System.Net)
プロキシ設定によりWebページへのアクセスを高速化するには?[2.0のみ、C#、VB] - @IT
proxy 要素 (ネットワーク設定)

解決の一助となれば幸いです。
どうぞよろしくお願いいたします。

編集 履歴 (0)
  • algon様
    設定等詳細ありがとうございました。
    確認してみましたが、いずれも改善致しませんでした。
    FtpWebRequestについてですが、Implicit SSLでの接続をサポートしていないようで、そちらが原因の一因なのかと考えております。
    そのため今回はTcpClientを用い実装とさせていただきました。

    ご回答頂きありがとうございました
    また、
    ありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。