FTPWebRequest Загрузка файлов будет загружать только два файла! - PullRequest
3 голосов
/ 01 октября 2009

Привет! Я использую асинхронные члены WebRequest для загрузки файлов на FTP-сервер IIS.

Я могу успешно загрузить два файла. Однако BeginGetResponse для третьего файла никогда не вызывает мою процедуру обратного вызова!

Любые идеи приветствуются?

спасибо,

джон

Ответы [ 2 ]

1 голос
/ 06 октября 2009

Спасибо за ваш ответ. Я обнаружил, что моя проблема связана с ServicePoint.Connection.Limit

Я увеличил это значение до 4 и начал использовать синхронные методы. Мои файлы FTP теперь загружают файлы по мере необходимости.

Однако, хотя я могу убедиться, что мои файлы достигают сервера в целости и сохранности, метод Close () в потоке большую часть времени выдает веб-исключение, сообщающее, что соединение было закрыто.

Я пробовал KeepAlive, но сократил исключения только на 10% (очень грубо) переводов.

Я игнорирую ошибки, так как могу подтвердить, что отправленные байты == общее количество байтов файла, но это не джентльменский.

Я не совсем уверен, как обойти это; Я потратил несколько дней на поиски в интернете и нашел людей с похожими проблемами, но без реальных ответов.

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

Джон.

1 голос
/ 05 октября 2009

Несколько идей:

  • сделайте запросы синхронно и посмотрите, исчезнет ли проблема. если нет, то начните внимательно присматриваться к этому третьему файлу (это HUUUUUUUUUGE?)
  • убедитесь, что вы явно вызываете FtpWebRequest.EndGetResponse () в обработчике обратного вызова, а затем вызываете Close () для ответа. В противном случае вы рискуете оставить соединения открытыми и, возможно, столкнетесь с лимитами клиентских, серверных или прокси-соединений.
  • если вы уже делаете эти вещи, установите сетевой анализатор, например Network Monitor 3.3 , и посмотрите, что на самом деле происходит в сети. Там вы сможете увидеть любые ошибки.
  • если вы видите ошибки, отследите их. если вы фактически никогда не видите, чтобы третий запрос проходил по проводам, посмотрите на пределы клиентского соединения как на виновника. Если вы видите, что третий запрос проходит по проводам, но ответа нет, посмотрите на проблему с сервером, такую ​​как регулирование N запросов от одного и того же клиента в течение M секунд - и попробуйте добавить задержку после каждого запроса, чтобы увидеть, можно ли этого избежать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...