2013-03-08 31 views
6

我使用下面的方法列出文件夾的內容:連接到同一臺服務器使用不同的用戶名

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它與下面的錯誤出現:

The remote server returned an error: (503) Bad sequence of commands.

的事情,我曾嘗試:

  1. 我試過設置ftprequest.KeepAlive = false
  2. 我已經嘗試使用UsePassive,代理等所有排列
  3. 我能夠連接到兩個用戶名使用FileZilla與安全FTP啓用,他們都工作。沒有啓用FTP,也不會連接。

這是奇怪的是,我的代碼將連接使用myusername1未啓用SSL在我的代碼。

總結:

  • myusername1myusername2不會在未啓用安全的FTP上的FileZilla連接。
  • myusername1在我的C#方法內工作,沒有啓用ftprequest.EnableSsl
  • myusername2在我的C#方法中不起作用,無論是否啓用ftprequest.EnableSsl
  • 異常正在觸發我的using()聲明行。

別的東西,我剛剛注意到,當我將鼠標懸停在我的ftprequest,它顯示了一個NotSupportedException異常,但是這似乎無論哪個設定我使用時使用

如果我將鼠標懸停在我最初ftprequest證書myusername2,這說明我的using()之前拋出的異常:

enter image description here

+1

FtpWebRequest.ContentType記錄爲總是拋出NotSupportedException異常,所以可能沒有太大意義。 我只能想到使用WireShark來查看電線上發生了什麼。 – 2013-03-08 09:55:53

+0

主要問題是..成功完成文件傳輸嗎? – MethodMan 2013-03-08 09:57:18

+0

儘管它是同一臺服務器,但我可以使用myusername1來列出目錄內容,但不能使用myusername2。 – Luke 2013-03-08 09:58:02

回答

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」, 「文摘」, 「Kerberos的」, 「協商」 ......)。

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

0

I'm connecting to a single Linux server via FTP.

CHMOD對第二用戶的FTP服務器/文件夾中的燙髮,他們應該是一樣的第一個用戶。

CHMOD 777將允許所需的訪問..

相關問題