Загрузить файл на удаленный сервер, как я должен? - PullRequest
5 голосов
/ 01 марта 2010

Я почесал голову об этом. Мой сценарий заключается в том, что мне нужно загрузить файл на компьютер сервера компании (в папку на c :) с нашего хостинга (совершенно другой сервер). Я не знаю, как мне это сделать. Любой из вас получил советы или код о том, как это делается.

Спасибо, ребята

Ответы [ 3 ]

3 голосов
/ 01 марта 2010

Я бы настроил FTP-сервер (например, сервер IIS или сторонний сервер) на корпоративном сервере. Если проблема в безопасности, вам нужно настроить SFTP (безопасный FTP), а не обычный FTP, поскольку FTP не является протоколом передачи с естественной безопасностью. Затем создайте службу на хостинг-сервере, чтобы забирать файлы по мере их поступления и отправлять их на сервер компании, используя FTP-контроль C # / .NET. Честно говоря, это должно быть довольно просто.

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

Обновление 2: Добавлено примечание о безопасности. Обратите внимание, что это менее важно, если серверы находятся в одном поддомене и не будут маршрутизироваться за пределы сети компании и / или если данные не являются конфиденциальными. Сначала я не думал об этом, потому что сейчас работаю над таким проектом, но наши данные ни в коем случае не являются конфиденциальными.

0 голосов
/ 01 марта 2010

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

  • Ваш внешний сервер принадлежит другой компании или группе, и вы не можете изменить его? Если нет, вы можете рассмотреть возможность размещения процесса на той же машине, либо в процессе, либо в качестве отдельной службы на машине. Если не может быть изменено , вы можете рассмотреть возможность размещения службы на целевом компьютере, чтобы она находилась там же, где файлы должны отображаться в.
  • Нужно ли синхронизировать файлы с процессом? То есть они должны быть загружены, перемещены и проверены как одна операция? Если нет, то, вероятно, лучше выбрать отдельный процесс. Отдельный процесс даст вам некоторую гибкость, но помните, что это будет отдельный процесс и отдельный набор кода для управления и работы с
  • Насколько велики загружаемые файлы? Они различаются в зависимости от загрузки? такое простые файлы, двоичные файлы (почтовые индексы, исполняемые файлы и т. д.)? Если файлы маленькие, у вас есть больше вариантов, чем если они большие. Если они достаточно малы, вы даже можете передавать их по очереди.

В зависимости от ответов на приведенные выше некоторые из них могут работать для вас:

  • Использовать MSMQ . Это будет работать для простых сообщений размером около 3 МБ без особых хлопот. Идеально подходит для сообщений, с которыми можно напрямую работать (например, XML).
  • Использовать прямую ретрансляцию HTTP. На главном компьютере откройте соединение HTTP (s) с конечным компьютером и передайте файл. Опять же, это будет работать лучше для небольших файлов (то есть всего несколько КБ, так как это будет сделано в строке)
  • Если у вас есть доступ к главному компьютеру, разверните на нем отдельный процесс, который создает или собирает файлы и использует любой из перечисленных методов для отправки их на конечный компьютер.
  • Вы можете использовать SCP, FTP (любой формы SFTP и т. Д.) На хост-машине (если у вас есть доступ) или на целевой машине для размещения входящих файлов и использования пакетного процесса для перемещения файлов. Это будет связано с множеством проблем, таких как размер файла, синхронизация и синхронизация. Я бы посчитал это последним средством, в зависимости от ситуации.
  • Опять же, в зависимости от размера сообщения, вы также можете использовать уровень абстракции, такой как БД, в качестве промежуточного уровня между двумя компьютерами. Это будет работать до тех пор, пока две машины смогут видеть БД (или другое место хранения) и обе будут действовать на нее. SQL Server Service Broker может использоваться для этой цели (и большинство других продуктов БД предлагают аналогичные продукты).
  • Вы можете посмотреть другие продукты, такие как WSO2 ESB или NServiceBus , чтобы упростить обмен сообщениями между двумя приложениями и сделать их встроенными.

Надеюсь, это даст вам некоторые отправные точки для изучения.

0 голосов
/ 01 марта 2010

Управление загрузкой файлов Даррена Джонстона является таким же хорошим решением, как и везде. Он имеет возможность обрабатывать большие файлы, не влияя на память сервера ASP.NET, и может отображать процесс загрузки файла без необходимости зависимости Flash или Silverlight.

http://darrenjohnstone.net/2008/07/15/aspnet-file-upload-module-version-2-beta-1/

...