2016-12-12 1 views
1

Я видел десятки примеров, когда проблема была устранена с помощью библиотеки в названии. Типичный пример я вижу, что должно работать это:Проблемы с System.Net.FtpClient с openwrite

 string destinationPath = PathInfo.FileNameConvention; 
     using (FileStream fileStream = File.OpenRead(sourcePath)) 
     { 

      using (Stream ftpStream = FTPClient.OpenWrite(string.Format("'{0}'", destinationPath), FtpDataType.ASCII)) 
      { 
       fileStream.CopyTo(ftpStream); 
      } 
     } 

Когда я делаю этот код, я получаю ошибку длины имени на бревне ftpTrace. Когда я использую только путь назначения, я получаю ошибку тайм-аута. Я отправляю на мэйнфрейм MVS OS. Я могу подключиться и войти в систему просто отлично. возможность отправлять команды сайта с помощью метода ftpclient.execute. Я попытался, из любопытства, отправить команду put с помощью метода execute и получить неизвестную команду для put. Кто-нибудь тоже имеет эту проблему?

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

Некоторая справочная информация, метод OpenWrite библиотеки отправляет команду STOR с использованием отправленного пути и по умолчанию будет бинарным.

+0

при выполнении FTP, возможно, вам нужно использовать Change Dir команды, так что длинный файл имена или имена путей не влияют на функциональность, которую я бы проверил на эту первую. «Запуск ChangeDir, а затем передать имя файла не полный путь» если это помогает – MethodMan

+0

@MethodMan Path.GetFileName (localFile) в основном делает, как вы описали. Он принимает полный локальный путь и получает только имя файла. – ggiaquin16

ответ

1

Убедитесь, что вы настроили FTP-библиотеку использовать активный режим (или включить FTP пассивный режим в брандмауэре и мэйнфреймов)

Длинный ответ: Протокол FTP использует два соединения, одна команда соединения от клиента к сервер и одно соединение для передачи данных, которое может подключаться либо от клиента к серверу (пассивный режим), либо от сервера к клиенту (активный режим).

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

Поскольку Windows ftp.exe поддерживает только активный режим, и вы не устанавливаете режим в своем коде, я предполагаю, что мейнфрейм настроен для активного режима, в то время как ваша FTP-библиотека по умолчанию переходит в пассивный режим. Пассивный режим очень распространен, так как активный режим не работает с NAT-маршрутизаторами.

Проверьте, есть ли настройка конфигурации для изменения режима передачи, но не удивляйтесь, если библиотека поддерживает только пассивный режим.

Дополнительная информация:

+0

Извините! Я должен был указать некоторые данные клиента библиотеки. На самом деле у меня активный активный режим, и это было тайм-аут. Когда у меня включен пассивный режим, он дает мне соединение, отказавшееся от ошибки сервера. Администратор сервера попросил меня сделать это в пассивном режиме, и я жду, чтобы услышать от сетевой команды о портах. Библиотека поддерживает несколько типов активных и пассивных. В настоящее время я настроен на расширенный пассив в соответствии с запросом администратора сервера. Это приводит к тому, что соединение отказалось от сообщения. – ggiaquin16

+0

Сегодня я узнал о «расширенном пассивном» :-) Я слишком долго живу в IPv4-мире. Похоже, вы скоро разобрались с какой-нибудь помощью от сетевых администраторов, удачи! – EventHorizon

Смежные вопросы