Я продолжаю получать сообщение об ошибке «Удаленный сервер вернул ошибку: (530) Не вошел». когда вызывается FtpWebRequest.GetResponse(). Я подозреваю, что это потому, что я неправильно сконфигурировал FTP-сайт для обычной проверки подлинности, но я не уверен. Я читал другие сообщения, но решения, похоже, вращаются вокруг неправильных учетных данных, заданных в объекте NetworkCredential. Я хотел бы иметь возможность передавать учетные данные на ftp-сайт через SSL. Я выделил проблему для тестового проекта. Вот она, в основном скопированы из 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:
я заметил, что IIS не спрашивай меня пароля при обычной проверке подлинности была создана. Я не знаю, почему это так. Должен ли я не использовать обычную проверку подлинности для FTP-сайта?
Большое спасибо заранее!