Чтение файла FTP из виртуальной машины Azure или веб-задания Azure
Я создал консольное приложение, которое читает файл CSV с FTP- сервера и выдает записи после проверки в базу данных.
Когда я попробовал код с моей локальной машины, он работал отлично. Нет ошибок, нет ошибок. Но когда я помещаю его на виртуальную машину Azure, чтобы запланировать его. ИЛИ Когда я создаю веб-задание Azure для создания задания по расписанию, я получаю следующую ошибку при доступе к файлу.
Удаленный сервер возвратил ошибку: (500) Синтаксическая ошибка, команда не распознана. в System.Net.FtpWebRequest.SyncRequestCallback(Object obj) в System.Net.FtpWebRequest.RequestCallback(Object obj) в System.Net.CommandStream.Dispose(логическое удаление) в System.IO.Stream.Close() в System.IO.Stream.Dispose() в System.Net.ConnectionPool.Destroy(PooledStream pooledStream) в System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, объект owningObject, Int32 creationTimeout, логическое canReuse) в System.Net.FtptageSecRequestReququReququ) в System.Net.FtpWebRequest.GetResponse() в Bethesda_DataUpload.Program.Main(String[] args) в D:\Projects\Program.cs: строка 35
Я использую следующий код для подключения к FTP-серверу
string dataFile = "ftp://testftp-L.cloudapp.net/Inbound/sampleFile.csv";
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(dataFile));
request.UsePassive = false;
request.UseBinary = true;
request.KeepAlive = true;
request.Credentials = new NetworkCredential(ftpUsrName, ftpPassword);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Proxy = WebRequest.DefaultWebProxy;
request.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
List<string> entries = new List<string>();
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
entries = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();
}
}
Я пробовал все комбинации KeepAlive и UsePassive, как
Сочетание 1
request.UsePassive = false;
request.KeepAlive = false;
Сочетание 2
request.UsePassive = false;
request.KeepAlive = true;
Комбинация 3
request.UsePassive = true;
request.KeepAlive = false;
Комбинация 4
request.UsePassive = true;
request.KeepAlive = true;
Какой код я должен использовать?