2017-01-27 171 views
1

我不断收到错误“远程服务器返回错误:(530)未登录。”当调用FtpWebRequest.GetResponse()时。我怀疑这是因为我错误地配置了FTP站点进行基本身份验证,但我不确定。我已阅读其他帖子,但解决方案似乎围绕着NetworkCredential对象中指定的错误凭证。我希望能够通过SSL将凭据传递到FTP站点。我已将问题隔离到测试项目。这,主要是从MSDN https://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.enablessl(v=vs.110).aspx复制:FtpWebRequest:远程服务器返回错误:(530)未登录

public static void Main(string[] args) 
{ 
    // Only use this to get around issues with self-signed certificates... 
    ServicePointManager.ServerCertificateValidationCallback = 
     delegate (object s, X509Certificate certificate, X509Chain chain, 
     SslPolicyErrors sslPolicyErrors) { return true; }; 

    ListFilesOnServerSsl(new Uri("ftp://127.0.0.1:21")); 

    Console.WriteLine("Press any key..."); 
    Console.ReadKey(); 
} 

public static bool ListFilesOnServerSsl(Uri serverUri) 
{ 
    // The serverUri should start with the ftp:// scheme. 
    if (serverUri.Scheme != Uri.UriSchemeFtp) 
    { 
     return false; 
    } 
    // Get the object used to communicate with the server. 
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri); 
    request.Method = WebRequestMethods.Ftp.ListDirectory; 
    request.UseBinary = false; 
    request.EnableSsl = true; 

    // Need to use credentials to log in... 
    request.Credentials = new NetworkCredential("TestFtpUser", "IDontKnow"); 

    // Get the ServicePoint object used for this request, and limit it to one connection. 
    // In a real-world application you might use the default number of connections (2), 
    // or select a value that works best for your application. 

    ServicePoint sp = request.ServicePoint; 
    Console.WriteLine("ServicePoint connections = {0}.", sp.ConnectionLimit); 
    sp.ConnectionLimit = 1; 

    FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
    Console.WriteLine("The content length is {0}", response.ContentLength); 
    // The following streams are used to read the data returned from the server. 
    Stream responseStream = null; 
    StreamReader readStream = null; 
    try 
    { 
     responseStream = response.GetResponseStream(); 
     readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8); 

     if (readStream != null) 
     { 
      // Display the data received from the server. 
      Console.WriteLine(readStream.ReadToEnd()); 
     } 
     Console.WriteLine("List status: {0}", response.StatusDescription); 
    } 
    finally 
    { 
     if (readStream != null) 
     { 
      readStream.Close(); 
     } 
     if (response != null) 
     { 
      response.Close(); 
     } 
    } 


    Console.WriteLine("Banner message: {0}", 
     response.BannerMessage); 

    Console.WriteLine("Welcome message: {0}", 
     response.WelcomeMessage); 

    Console.WriteLine("Exit message: {0}", 
     response.ExitMessage); 
    return true; 
} 

接下来是在IIS中在我的本地创建FTP站点的截图:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

我注意到IIS在设置基本身份验证时没有问我密码。我不知道这是为什么。我应该不使用FTP站点的基本身份验证吗?

非常感谢提前!

回答

0

事实证明,我没有在机器上配置本地用户帐户,以便在IIS中配置ftp站点时与“指定的用户”匹配。进入“控制面板”=>“用户帐户”=>“用户帐户”=>“管理用户帐户”=>“管理用户帐户”=>添加,并将用户添加到本地计算机后,消息“ 530)未登录“已消失。

相关问题