c # FTP закрыть соединение после перемещения файла? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть код c #, который загружает файл на компьютер с использованием FTP.

Моя проблема заключается в том, что файл автоматически запускается на удаленном компьютере и меняет IP-адрес соединения (это то, что он долженделать). поэтому код «подумайте», что в соединении что-то не так - и покажите исключение

        "The underlying connection was closed: An unexpected error occurred on a receive."  

Я попытался вставить в скрипт задержку в 10 секунд, прежде чем он сменит IP, но все равно получаюошибка. (Я также попробовал 30 секундную задержку)

есть ли способ "отключить" сразу после отправки файла? это команда, которую мне нужно поместить в C #?

это функция отправки

string FTPAddress = RouterIP;
            string username = "admin";
            string password = "password";
            Console.WriteLine("Going to upload to - " + FTPAddress);
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + FTPAddress + "/" +"script.auto");

            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential(username, password);
            request.UsePassive = true;
            request.UseBinary = true;
            request.KeepAlive = false;


            FileStream stream = File.OpenRead(FilePath);
            byte[] buffer = new byte[stream.Length];

            stream.Read(buffer, 0, buffer.Length);
            stream.Close();

            try
            {
                using (Stream reqStream = request.GetRequestStream())
                {
                    reqStream.Write(buffer, 0, buffer.Length);
                   // reqStream.Close(); - get the error with or without this command 
                }
            }
            catch (Exception e)
            {
                if (e.Source != null)
                    Console.WriteLine(e.Message);    
            }

            finally
            {

            }

проблема в том, что, поскольку я получаю исключение, основной код не продолжаетсякак следует - и не обновляет БД.

что мне нужно сделать?

Спасибо,

** Не думаю, что проблема вскрипт с dealy - это что-то с закрытием соединения ftp, потому что я захожу на удаленный компьютер и вижу, что он держит соединение дольше 30 секунд ...

Когда я смотрю на исключение StackTrace этоэто ошибка:

            "   at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)\r\n   at System.Net.FtpWebRequest.RequestCallback(Object obj)\r\n   at System.Net.CommandStream.Dispose(Boolean disposing)\r\n   at System.IO.Stream.Close()\r\n   at System.IO.Stream.Dispose()\r\n   at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)\r\n   at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)\r\n   at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)\r\n   at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)\r\n   at System.Net.FtpWebRequest.RequestCallback(Object obj)\r\n   at System.Net.CommandStream.Abort(Exception e)\r\n   at System.Net.CommandStream.CheckContinuePipeline()\r\n   at System.Net.FtpWebRequest.DataStreamClosed(CloseExState closeState)\r\n   at System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState closeState)\r\n   at System.Net.FtpDataStream.Dispose(Boolean disposing)\r\n   at System.IO.Stream.Close()\r\n   at System.IO.Stream.Dispose()\r\n   at PingAlert.Program.UploadScript(String FilePath, String RouterIP) in C:\\Users\\****\\source\\repos\\******\\*******\\Program.cs:line 798"   string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...