FTPサーバーからCSVファイルを読み取り、検証後にレコードをデータベースにダンプするコンソール アプリケーションを作成しました。
ローカル マシンからコードを試したところ、完全に機能しました。エラーもバグもありません。しかし、それをスケジュールするために Azure Virtual Machine に配置したとき。または、スケジュール ジョブを作成するために Azure Web ジョブを作成すると、ファイルへのアクセス中に次のエラーが発生します。
リモート サーバーがエラーを返しました: (500) 構文エラー、認識できないコマンド。System.Net.FtpWebRequest.SyncRequestCallback(Object obj) で System.Net.FtpWebRequest.RequestCallback(Object obj) で System.Net.CommandStream.Dispose(Boolean disposing) で System.IO.Stream.Close() で System.IO .Stream.Dispose() で System.Net.ConnectionPool.Destroy(PooledStream pooledStream) で System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse) で System.Net.FtpWebRequest.FinishRequestStage(RequestStage ステージ) ) System.Net.FtpWebRequest.GetResponse() at Bethesda_DataUpload.Program.Main(String[] args) in D:\Projects\Program.cs:line 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;
どのコードを使用すればよいですか?