Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WCF, Web Services, Remoting Новый топик    Ответить
 Передача файлов, в т.ч. больших  [new]
КириллН
Member

Откуда: Санкт-Петербург
Сообщений: 425
Приветствую, коллеги!
Как вообще передавать файлы при помощи веб-сервиса - уже разобрался: byte[] -> base64string.
Как передавать большие файлы ЗА РАЗ - тоже: увеличить размер сообщения в веб-конфиге И на стороне сервера, И на стороне клиента. Но считаю это костылём.

Подскажите, как ещё можно обмениваться большими файлами при использовании веб-сервиса и без использования файлообменников/FTP. В идеале - и без промежуточного сохранения на сервере, т.к. в конечном счёте эти файлы либо пишутся в БД (BLOB), либо извлекаются из БД для передачи потребителю сервиса. Чаще всего, это картинки/PDF/многостраничные TIFF, но возможны и другие потребности.
30 авг 17, 11:48    [20758271]     Ответить | Цитировать Сообщить модератору
 Re: Передача файлов, в т.ч. больших  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4277
КириллН, Large Data and Streaming
30 авг 17, 11:57    [20758293]     Ответить | Цитировать Сообщить модератору
 Re: Передача файлов, в т.ч. больших  [new]
КириллН
Member

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

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

Если бы была возможность как-то хранить части файла в экземпляре объекта, а не на диске, и "дочитывать" его по мере передачи очередного фрагмента байт... А вот как - не знаю. Веб-сервис, насколько я понял, инстанцируется ИИСкой при каждом обращении потребителя. Значит, сам сервис не может хранить у себя части и должен обращаться к сторонней службе-читалке файлов (из базы)...
В общем, пока сложно понять.
30 авг 17, 11:58    [20758298]     Ответить | Цитировать Сообщить модератору
 Re: Передача файлов, в т.ч. больших  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13630
КириллН
Подскажите, как ещё можно обмениваться большими файлами при использовании веб-сервиса и без использования файлообменников/FTP.
Large Data and Streaming
КириллН
В идеале - и без промежуточного сохранения на сервере, т.к. в конечном счёте эти файлы либо пишутся в БД (BLOB), либо извлекаются из БД для передачи потребителю сервиса.
При чтении из БД таки лучше создать на сервере временный файл на время передачи. Держать открытым DbDataReader пока клиент скачивает "много данных" как-то не очень.
30 авг 17, 11:58    [20758301]     Ответить | Цитировать Сообщить модератору
 Re: Передача файлов, в т.ч. больших  [new]
КириллН
Member

Откуда: Санкт-Петербург
Сообщений: 425
buser
Large Data and Streaming

Благодарю за ценную ссылку!

Алексей К
При чтении из БД таки лучше создать на сервере временный файл на время передачи. Держать открытым DbDataReader пока клиент скачивает "много данных" как-то не очень.

Ну, если best practices рекомендуют промежуточный файл, то так тому и быть. Спасибо!
30 авг 17, 13:03    [20758475]     Ответить | Цитировать Сообщить модератору
Все форумы / WCF, Web Services, Remoting Ответить