2010-05-06 3 views
0

У меня есть веб-сервис, который находится на сервере А. Webservice будет отвечать за поиск файлов определенного типа в виртуальном каталоге на сервере B, а затем вернет полный URL-адрес в файлы.Найти файлы на удаленном сервере

У меня есть служба, работающая, если файлы находятся на одной машине - это достаточно прямолинейно. Мой вопрос - это лучший способ найти все файлы определенного типа (например, * .xml) во всех каталогах под известным виртуальным каталогом на удаленном сервере?

Так, например, вебсервис на http://ServerA/service.asmx и виртуальный каталог находится в http://serverB/virtualdirectory

Так что в этом коде, очевидно, DirectoryInfo не займет путь к удаленному серверу - как получить доступ к этим, так что я может найти файлы, которые он содержит? Как мне получить полный URL-адрес файла, найденного на этом удаленном сервере?

 DirectoryInfo updateDirectory = new DirectoryInfo(path); 

     FileInfo[] files = 
      updateDirectory.GetFiles("*.xml", SearchOption.AllDirectories); 

     foreach (FileInfo fileInfo in files) 
     { 
      // Get URL to the file 
     } 

У меня не может быть файлов и услуг на одном сервере - решение ИТ, которое из моих рук.

Спасибо!

ответ

1

Этот серверB используется только как репозиторий? Другой подход: установка приложения (простой веб-сервис может быть), что считывает содержимое каталога и возвращает список URL-адресов.

Вы можете его развернуть, выполнив операции (веб-методы) файлов, обрабатывающих на этой службе.

+0

Это мой принятый ответ, потому что я думаю а) ответственность за поиск каталогов, вероятно, должна быть на сервере, где находятся файлы. b) Кажется, нет простого способа удаленного поиска в виртуальном каталоге Если я добавлю эту вторую услугу, то в чем смысл первой услуги? Это недостаток, но, по крайней мере, это единственная точка контакта для ведения журнала и т. Д., И фактический файловый сервер может меняться ... Thanks –

1

Вам необходимо убедиться в том, что местоположение на сервере B можно просматривать, что означает, что при доступе к URL-адресу http://serverB/virtualdirectory вы можете видеть файлы.

Когда это будет сделано, вы можете использовать System.Net.WebClient для получения данных с URL-адреса (метод DownloadData). Разбирайте данные и используйте WebClient для получения каждого файла.

+0

Спасибо за предложение - однако я определенно не хочу загружать любые данные между двумя серверами, так как эти файлы могут быть довольно большими. Я хочу только получить список URL-адресов файлов определенного типа в виртуальном каталоге, а затем вернуть их вызывающему абоненту. –

0

Я бы настроить виртуальный каталог на SERVERA IIS, чтобы указать путь UNC на сервер B. , как: http://serverA/virtualdirectory/ получает отображается в \ ServerB \ файлы \ Тогда, как вы уже знаете, что URL-путь и может получить каталог с помощью getfiles, вы можете просто создать правильный URL-адрес в ответе asmx.

Редактировать: Поскольку вы используете winforms, я бы предложил не подвергать файлы файлу через виртуальный каталог, доступ к которому можно получить из URL-адреса. Вы должны просто передавать файлы с помощью клиента winforms через ваш asmx. Существует несколько способов сделать это. Этот проект является очень полной отправной точкой для приложения передачи файлов MTOM. http://www.codeproject.com/KB/XML/MTOMWebServices.aspx Вы также можете просто передавать файлы с использованием потоков байтов. http://support.microsoft.com/kb/318425

Надеюсь, что это поможет.

+0

И что потребляет веб-сервис? Браузер или клиентское приложение вроде winforms или wpf? – CliffyB

+0

Приложение winforms клиента потребляет услугу. Я посмотрю на сопоставление виртуального каталога по пути UNC так. –

+0

Цените дополнительное редактирование, хорошую ссылку и интересный подход. Тем не менее, для компонента, который я использую, нужен полный URI для создания загружаемой части. –

1

Создайте веб-службу на сервере ServerB и попробуйте найти каталоги и вернуть списки URL-адресов в файлы. Вы также можете кэшировать эту информацию, если информация о файле не изменяется слишком часто, улучшая скорость. Затем ваша служба на сервере ServerA может вызвать эту службу, и, как упоминалось в другом месте, клиент вашего рабочего стола также может использовать эту службу для загрузки байтов файла с помощью другого метода службы.

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