7

次の方法を使用して、フォルダーの内容を一覧表示しています。

private void TestFtp()
{
    try
    {
        // List all of the files from FTP
        FtpWebRequest ftprequest = (FtpWebRequest)WebRequest.Create(new Uri("ftp://m3database/recover/"));

        ftprequest.Credentials = new NetworkCredential("myusername1", "********");

        ftprequest.Method = WebRequestMethods.Ftp.ListDirectory;
        ftprequest.UsePassive = false;
        ftprequest.Proxy = null;            

        using (var resp = ftprequest.GetResponse())
        {
            StreamReader reader = new StreamReader(resp.GetResponseStream());

            MessageBox.Show(reader.ReadToEnd());
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
}

FTP経由で単一のLinuxサーバーに接続しています。と の資格情報を使用しmyusername1myusername2接続しています。

myusername1資格情報を使用している場合、この関数を使用するとディレクトリの内容を一覧表示できますが、使用myusername2すると次のエラーが発生します。

リモート サーバーがエラーを返しました: (503) コマンドのシーケンスが正しくありません。

私が試したこと:

  1. 設定してみftprequest.KeepAlive = falseました。
  2. UsePassive、Proxyなどのすべての順列を使用してみました.
  3. セキュア FTP を有効にした FileZilla を使用して両方のユーザー名に接続でき、両方とも機能します。FTP を有効にしないと、どちらも接続できません。

myusername1コード内で SSL を有効にせずにコードを使用して接続するのは奇妙です。

要約すれば:

  • myusername1安全な FTP を有効にしないとmyusername2FileZilla に接続できません。
  • myusername1ftprequest.EnableSsl有効にせずに私のC#メソッド内で動作します。
  • myusername2が有効になっているかどうかに関係なく、C# メソッド内では機能しませんftprequest.EnableSsl
  • using()私のステートメントの行で例外がトリガーされています。

他に気づいたことがあります。自分の上にftprequestカーソルを合わせると、NotSupportedException が表示されますが、これは使用する資格情報のセットに関係なく表示されます

ftprequestを使用しているときにイニシャルにカーソルを合わせると、 のmyusername2前にスローされた例外が表示されますusing()

ここに画像の説明を入力

4

2 に答える 2

0

これは暗闇の中のショットかもしれませんが、CredentialCache を使用してみましたか?

        System.Net.NetworkCredential nc = new System.Net.NetworkCredential("user", "password");
        System.Net.CredentialCache cc = new System.Net.CredentialCache();
        cc.Add(new Uri("ftp://m3database"), "Basic", nc);
        System.Net.FtpWebRequest ftprequest = (System.Net.FtpWebRequest)System.Net.WebRequest.Create("ftp://m3database/recover/");
        ftprequest.Credentials = cc;
        ftprequest.Method = System.Net.WebRequestMethods.Ftp.ListDirectory;

         using (var resp = ftprequest.GetResponse())
            {
                StreamReader reader = new StreamReader(resp.GetResponseStream());

                MessageBox.Show(reader.ReadToEnd());
            }
        }

また、credentialcache は、さまざまな認証タイプ オプション ("NTLM"、"Digest"、"Kerberos"、"Negotiate"...) も提供します。

詳細はこちら --> http://msdn.microsoft.com/en-us/library/59x2s2s6.aspx

于 2013-03-08T21:19:44.523 に答える