#wcf #exception #memory #wshttpbinding
#wcf #исключение #память #wshttpbinding
Вопрос:
У меня есть приложение для загрузки файлов на сервер. Я использую nettcpbinding и wshttpbinding. Когда размер файлов превышает 200 МБ, я получаю исключение из памяти. Работая над этим, я видел, что люди рекомендуют потоковую передачу, и, конечно, это работает с nettcpbinding для больших файлов (> 1 ГБ), но при использовании wshttpbinding, каким был бы подход?? Должен ли я перейти на basichttpbinding?? что?? Спасибо.
Ответ №1:
Я предлагаю вам предоставить другую конечную точку только для загрузки данных такого большого размера. У этого может быть привязка, поддерживающая потоковую передачу. В нашем предыдущем проекте нам нужно было выполнять загрузку файлов на сервер как часть бизнес-процесса. В итоге мы создали 2 конечные точки, одна из которых предназначена только для загрузки файлов, а другая — для всех других бизнес-функций.
Служба потоковых данных может быть общей службой для потоковой передачи любых данных на сервер и, возможно, возвращать токен для идентификации данных на сервере.Для последующих запросов этот токен может быть передан для манипулирования данными на сервере.
Ответ №2:
Если вы не хотите (или не можете по законным причинам) изменять привязку или использовать потоковую передачу, что вы можете сделать, так это использовать какой-либо метод с подписью в соответствии со следующими строками:
void UploadFile(string fileName, long offset, byte[] data)
Вместо отправки всего файла вы отправляете небольшие пакеты и указываете, куда следует поместить данные. Конечно, вы можете добавить дополнительные данные, например, полный размер файла, CRC файла, чтобы узнать, была ли передача успешной и т.д.