OMG. Когда MS представила WCF, они действительно должны упомянуть, что это не технология загрузки / выгрузки данных или, по крайней мере, не напрямую без дополнительного кодирования.
Ваш сервис ужасен, и для 2 ГБ он, скорее всего, все равно не будет работать, поскольку использует буферизованную передачу и обычное кодирование текста. Это означает, что каждые 2 ГБ будут сначала загружены с диска в память клиентского компьютера с кодировкой Base64 (размер + 33%). Хранится в одном сообщении SOAP и передается на сервер, где все сообщение должно быть загружено в память, декодировано и обработано. Любая проблема в сети, и все сообщение исчезло. Любой тайм-аут и все сообщение исчезло. Btw. ваш MaxReceivedMessageSize
настроен на 260 МБ = после считывания 260 МБ служба выдаст неверный запрос.
Одновременно выполняется несколько таких загрузок, и ваш сервер не работает. Сервер будет открыт для присоединения к отказу в обслуживании настолько, насколько это возможно.
Для диагностики вашей ошибки используйте трассировка WCF на стороне сервера. Чтобы узнать о передаче больших сообщений, прочитайте эту статью . Это поможет вам определить сервис, который работает лучше, но все равно будет довольно ненадежным. Лучший способ - это использовать некоторые фрагменты и передавать большие наборы данных в нескольких вызовах, разложив их на клиенте и перекомпоновав на сервере. Для повышения надежности и восстановления после сбоя клиент должен иметь возможность продолжить работу после сбойного чанка, а не передавать весь набор данных снова.
Существуют и другие функции, такие как сжатие для уменьшения размера передаваемых данных и CRC для проверки того, что передаваемые данные не были искажены при передаче.
ИМХО, это может быть намного лучше и проще реализовано без WCF с прямым использованием HttpListener
или универсального обработчика ASP.NET и фрагментированного HTTP-заголовка транспорта и заголовка диапазона.