Создать прямое соединение между клиентским ПК и удаленным сервером FRP - PullRequest
0 голосов
/ 21 апреля 2011

Всем доброго времени суток.

Я занимаюсь разработкой веб-приложения Asp.Net, в котором мне нужно реализовать загрузку файлов, но с небольшими сложностями:

Чтобы лучше объяснить,приложение работает на сервере "A" .. файлы должны быть загружены на совершенно отдельный сервер "B" ..

Как только клиент "C" загрузит файл через интерфейс сайта, файл долженна самом деле быть загруженным на сервер B.

Технически я уже достиг этого:

  • клиент выбирает файл, который он хочет загрузить со своего компьютера, затем нажимает кнопку «загрузить»
  • во время postBack of page ", сервер загружает файл, не сохраняя его
  • Я беру fileStream из элемента управления FileUploas и отправляю его через ftp на сервер" B ";

НО, фактически, этот файл передается дважды (C -> A -> B), что делает загрузку файла более длительной, чем обычно.

Мой вопрос: возможно ли это?открыть "прямую" связь между "C "и" B "через интерфейс сайта (работает на сервере" A "), чтобы выполнить одну передачу?Очевидно, я должен быть в состоянии сделать то же самое во время загрузки.

Альтернативой (по крайней мере, во время загрузки) должна быть "скрытие" двойной передачи путем сохранения временного файла на сервере "A",и затем снова перенесите его в «B», запустив отдельную задачу, так что пользователь сможет выполнять новые действия на сайте после «первой» загрузки.

Любое предложение очень ценится (даже довольноя буду оценивать «совместимость» с моим проектом)

Заранее спасибо,

Alberto

Примечание: я выбираю FTP, потому чтоклиент должен иметь возможность выбрать, где он хочет разместить сервер «B» (он может использовать «наш» ftp или, если он есть, отправлять файлы туда), и я считаю, что FTP является наиболее «совместимым» и «быстрым».установить "решение, будучи управляемым ftp аналогично независимо от серверной платформы" B ".

1 Ответ

0 голосов
/ 21 апреля 2011

Не ясно, какую связь вы ожидаете от C, чтобы быть в состоянии установить. Если C может открыть прямое соединение с B, и если у сервера A есть учетные данные для доступа к B, сценарий может выглядеть следующим образом:

  1. клиент C устанавливает канал команд с сервером A
  2. сервер A устанавливает командный канал с сервером B
  3. клиент начинает подготовку к передаче данных. В этот момент C запрашивает пассивный режим с сервера A. A немедленно начинает подготовку к передаче данных с сервера B и запрашивает пассивный режим с сервера B. Эта подготовка AB должна полностью выполняться, когда сервер A получает команду PASV от C и когда он отправляет ответ к этой команде. Так что он должен быть быстрый (я думаю, 2-3 секунды максимум).
  4. Сервер A получает адрес и порт для подключения с сервера B и отправляет эти данные в ответ на команду PASV, полученную от C.
  5. C передает данные в B. Сервер A получает «Передача завершена» от B через командный канал и отправляет их клиенту.
  6. Теперь сервер A может закрыть командный канал для сервера B (при необходимости).

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

...