2013-03-08 21 views
6

używam następujące metody, aby wyświetlić zawartość folderu:Podłączenie do tego samego serwera z różnych nazw użytkownika

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); 
    } 
} 

łączę na jednym serwerze Linux za pośrednictwem FTP. Korzystam z poświadczeń do połączeń myusername1 i myusername2.

jestem w stanie wyświetlić zawartość katalogu podczas korzystania z tej funkcji, jeśli używam myusername1 poświadczeń, jednak jeśli mogę użyć myusername2 to pojawia się z powodu następującego błędu:

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

rzeczy, które próbowałem:

  1. Próbowałem ustawić ftprequest.KeepAlive = false.
  2. Próbowałem używać wszystkich permutacji UsePassive, Proxy itp.
  3. Jestem w stanie połączyć się z obu nazwami użytkowników za pomocą FileZilla Z włączonym bezpiecznym FTP i oba działają. Bez włączonego FTP żadne z nich się nie połączy.

To jest dziwne, że mój kod łączy się przy użyciu myusername1 bez włączonego SSL w moim kodzie.

Podsumowując:

  • myusername1 i myusername2 nie będzie łączyć na FileZilla bez bezpiecznego FTP obsługującego.
  • myusername1 działa w ramach mojej metody C# bez włączonej ftprequest.EnableSsl.
  • myusername2 nie będzie działać w mojej metodzie C#, niezależnie od tego, czy jest włączone ftprequest.EnableSsl.
  • Wyjątek jest wywoływany na linii mojego oświadczenia using().

Coś innego Właśnie zauważyłem, kiedy unoszą się nad moim ftprequest, to pokazuje NotSupportedException, ale wydaje się to niezależnie od tego, który zestaw poświadczeń używam

Gdybym unoszą się nad moim początkowym ftprequest podczas korzystania myusername2, pokazuje wyjątek rzucony przed moim using():

enter image description here

+1

FtpWebRequest.ContentType jest udokumentowane jak zawsze rzuca NotSupportedException, tak że prawdopodobnie nie znaczy wiele. Mogę myśleć tylko o używaniu WireSharka, żeby zobaczyć, co się dzieje na drucie. –

+0

główne pytanie brzmi .. czy transfer plików zakończył się sukcesem? – MethodMan

+0

Mogę wyświetlić zawartość katalogu przy użyciu "myusername1", ale nie "myusername2", nawet jeśli jest to ten sam serwer. – Luke

Odpowiedz

0

to może być strzał w ciemności, lecz mają próbowałeś używać 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 daje również szereg opcji AuthenticationType ("NTLM", "Digest", "Kerberos", "Negocjuj" ...).

Więcej tutaj ->http://msdn.microsoft.com/en-us/library/59x2s2s6.aspx

0

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

CHMOD na perms na serwer FTP/folderu na 2. Użytkownik powinien być taki sam jak 1 Użytkownika.

CHMOD 777 umożliwi dostęp wymagane ..

Powiązane problemy