使用不同的用户名连接到同一服务器

时间:2013-03-08 09:47:18

标签: c# wpf ftp

我使用以下方法列出文件夹的内容:

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. 我可以使用FileZilla启用安全FTP连接到两个用户名,它们都可以正常工作。如果未启用FTP,则不会连接。
  4. 在我的代码中,我的代码将使用myusername1连接而不启用SSL,这是很奇怪的。

    总结:

      如果没有启用安全FTP,
    • myusername1myusername2将无法在FileZilla上连接。
    • myusername1在我的C#方法中无法启用ftprequest.EnableSsl
    • 无论myusername2是否已启用,
    • ftprequest.EnableSsl都无法在我的C#方法中使用。
    • 我的using()声明就触发了异常。

    我刚注意到的其他内容,当我将鼠标悬停在ftprequest上时,会显示NotSupportedException,但无论我使用哪种凭据,都会显示

    如果我在使用ftprequest时将鼠标悬停在我的初始myusername2上,则会在using()之前显示异常:

    enter image description here

2 个答案:

答案 0 :(得分: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还为您提供了一系列authenticationtype选项(“NTLM”,“Digest”,“Kerberos”,“Negotiate”......)。

更多信息 - > http://msdn.microsoft.com/en-us/library/59x2s2s6.aspx

答案 1 :(得分:0)

  

我通过FTP连接到单个Linux服务器。

CHMOD第二个用户的FTP服务器/文件夹上的权限,它们应该与第一个用户相同。

CHMOD 777将允许访问..