WCF Загрузить файл - PullRequest
       9

WCF Загрузить файл

0 голосов
/ 08 декабря 2011

Я никогда раньше не пользовался WCF, но хочу создать простой сервис. Я хочу, чтобы компьютер загрузил файл с локального компьютера. У меня есть это в моем интерфейсе:

[OperationContract]
[WebInvoke(Method = "GET",UriTemplate = "/File")]
Stream GetFile();

В методе я просто делаю это:

return new FileStream(@"c:\myfile.zip", FileMode.Open);

Когда я запускаю это с клиента, свойство Result содержит сам поток. Это нормально, и это работает, но я бы предпочел, чтобы клиент получал доступ к файлу с самого сервера, а не копировал весь объект. Каким будет URL для загруженного файла, чтобы клиент мог получить к нему доступ непосредственно с сервера? Я предположил, что это http://computername:port/something... (я полагаю, что это услуга REST?)

Ответы [ 2 ]

0 голосов
/ 08 декабря 2011

Давайте попробуем подумать над тем, что вы говорите.

  • Пользователь может получить доступ к файлу напрямую.В таком случае справедливо думать, что любой пользователь может получить доступ к любому файлу на любом компьютере.Очевидно, что это не так.

  • WCF предоставляет некоторый специальный интерфейс для доступа к файлам на компьютере, на котором он работает.Это также большая дыра в безопасности.

  • любые другие идеи?

В любом случае, если вы хотите поделиться файлом в Интернете,Вы должны сделать публичный интерфейс для этого.Это может быть сервер IIS, который будет возвращать его с сервера, или это может быть только ваш сервер WCF.

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

ОБНОВЛЕНИЕ: Чтобы включить потоковую передачу, вы можете посмотреть в этом article

UPDATE 2: Если вам действительно нужна потоковая передача видеофайла, Smooth Streaming может быть вариантом

0 голосов
/ 08 декабря 2011

Я думаю, что вы здесь все перепутали.Вы предоставляете сервис WCF с операцией, возвращающей Stream.То, что это файловый поток - это деталь реализации.С таким же успехом вы можете вернуть поток памяти, сетевой поток или что-нибудь, что действительно получается из Stream.Если вы хотите, чтобы клиент имел прямой доступ к файлу, вам нужно поделиться им, чтобы он мог получить к нему доступ.В Windows вы можете создать общую папку (но вы действительно не хотите показывать это в Интернете) или настроить ftp или http сервер.

Я не возился с WCF и потоковой передачей, но я бы хотелОжидайте, что когда вы предоставляете поток с сервера, он работает более или менее «из коробки» (имеется в виду, что он потоковый, а не загружает его в один большой блок).Взгляните на эту статью MSDN , в которой подробно описаны некоторые ограничения потоковой передачи с WCF.

...