C # FTP ListDirectoryDetails Проблема - PullRequest
2 голосов
/ 06 июня 2011

Я пытаюсь прочитать список файлов с FTP из direcotry, который содержит более 1000 файлов.

Я делаю это так:

    public static FtpWebRequest GetRequest(string uri)
    {
        FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
        req.Credentials = new NetworkCredential("login", "password");
        req.KeepAlive = false;
        req.UseBinary = false;
        req.UsePassive = true;
        return req;
    }

    public static bool CheckConnection()
    {
        FtpWebResponse respSize = null;
        try
        {
            FtpWebRequest reqFTP = GetRequest(@"ftp://myftp.com");
            reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
            respSize = (FtpWebResponse)reqFTP.GetResponse();
            respSize.Close();
            respSize = null;
            reqFTP.GetResponse().Close();

            return true;
        }
        catch (Exception ex)
        {

        //...
        }
        finally
        {
            if (respSize != null)
                respSize.Close();
        }
        return false;
    }

Я получаю сообщение об ошибке:

Удаленный сервер возвратил ошибку:

(451) Локальная ошибка при обработке.

в System.Net.FtpWebRequest.SyncRequestCallback (Объект OBJ)

в System.Net.FtpWebRequest.RequestCallback (Объект OBJ)

в System.Net.CommandStream.Dispose (Boolean утилизации)

в System.IO.Stream.Close ()

в System.IO.Stream.Dispose ()

в System.Net.ConnectionPool.Destroy (PooledStream pooledStream)

в System.Net.ConnectionPool.PutConnection (PooledStream pooledStream, объект owningObject, Int32 creationTimeout, Boolean canReuse)

в System.Net.FtpWebRequest.FinishRequestStage (RequestStage этап)

в System.Net.FtpWebRequest.SyncRequestCallback (Объект OBJ)

в System.Net.FtpWebRequest.RequestCallback (Объект OBJ)

в System.Net.CommandStream.Abort (Exception е)

в System.Net.CommandStream.CheckContinuePipeline ()

в System.Net.FtpWebRequest.DataStreamClosed (CloseExState closeState)

в System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx (CloseExState closeState)

в System.Net.FtpDataStream.Dispose (Boolean утилизации)

в System.IO.Stream.Close ()

в System.Net.FtpWebResponse.Close ()

в CheckConnection ()

кто-нибудь знает, что происходит?

С уважением Marcin

1 Ответ

1 голос
/ 06 июня 2011

От RhinoSoft (создатели программного обеспечения FTP Serv-U):

"Код ответа 451 может быть отправлен в ответ на любую команду, инициирующую передачу файла. Это временный отрицательный ответ, что означает, что условие ошибки является временным. Обычно оно отправляется в ответ на неожиданный запрос сервера локальная ошибка при обработке данных, которые она передает или получает. В этом случае клиенту рекомендуется перезапустить транзакцию FTP и повторить попытку. " [1]

Таким образом, это может быть проблема со связью между вашим программным обеспечением и FTP-сервером, не обязательно проблема с самим вашим программным обеспечением.

Не помешает увеличить длину Timeout свойства FtpWebRequest, но это, скорее всего, не является причиной, основываясь на моих исследованиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...