У меня есть код 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