2

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

KeepAliveUsePassiveのすべての組み合わせを試しました

組み合わせ 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;

どのコードを使用すればよいですか?

4

0 に答える 0