В предыдущем проекте, в котором я работал, у нас была похожая проблема. У нас был веб-сервис на C #, который получал запросы на носители. Носители могут варьироваться от файлов до изображений и были сохранены в базе данных с использованием столбцов BLOB. Первоначально веб-метод, который обрабатывал запросы поиска мультимедиа, считывал порцию из BLOB и возвращал вызывающей стороне. Это была одна поездка на сервер. Проблема этого подхода заключается в том, что клиент не имеет обратной связи о ходе операции.
Нет проблем с компьютером
наука, которая не может быть решена
дополнительный уровень косвенности.
Мы начали с рефакторинга метода тремя способами.
Method1 установить диалог между абонентом и веб-сервисом. Это включает в себя информацию о запросе (например, media Id) и обмене возможностями. Веб-служба ответила помеченным идентификатором, который используется вызывающей стороной для будущих запросов. Этот начальный вызов используется для распределения ресурсов.
Method2 вызывается последовательно до тех пор, пока не будет получено больше информации для носителя. Вызов включает в себя информацию о текущем смещении и отмеченном идентификаторе, который был предоставлен при вызове Method1 . Возврат обновляет текущую позицию.
Method3 вызывается для завершения запроса, когда Method2 сообщает, что чтение носителя запроса завершено. Это освобождает выделенные ресурсы.
Этот подход практичен, потому что вы можете немедленно дать пользователю обратную связь о ходе операции. У вас есть бонус, который заключается в разделении запросов на Method2 в разных потоках. Прогресс, о котором может сообщить чанк, как это делают некоторые клиенты BitTorrent.
В зависимости от размера большого двоичного объекта вы можете загружать его из базы данных за один раз или , читая его также кусками . Это означает, что вы можете использовать сбалансированный механизм, основанный на заданном водяном знаке (размер BLOB), чтобы загрузить его за один раз или частями.
Если проблема с производительностью не устранена, рассмотрите возможность упаковки результатов с использованием GZipStream или прочитайте о кодировщиках сообщений и обратите особое внимание на двоичный механизм и механизм оптимизации передачи сообщений (MTOM). 1039 *