Сколько байтов передано в WCF, прежде чем я должен использовать потоковую передачу? - PullRequest
3 голосов
/ 05 января 2011

У меня есть клиентское приложение, которое общается со службой обновлений для загрузки файлов.Служба обновлений получает их из базы данных, а затем отправляет их клиенту с помощью WCF.В настоящее время я использую WSHttpBinding, чтобы воспользоваться преимуществами безопасности.Таким образом, самый большой файл, который я загружал / отправлял, составляет около 8 МБ, и это прекрасно работает.Я недавно попробовал это с файлом, который был приблизительно 130 МБ, но ничего не происходило на клиенте;Использование сети просто село на 0%.

Я предполагаю, что файл слишком велик для передачи без потоковой передачи (maxReceivedMessageSize и т. д. равен 209715200, поэтому я знаю, что настройки подходят именно для него).Чтобы это исправить, я хочу, чтобы служба использовала BasicHttpBinding, чтобы я мог передавать файл в потоковом режиме, если он больше определенного размера.

У меня вопрос: при каком размере файла я должен переключиться с WSHttpBinding на BasicHttpBinding ипотоковое?Есть ли какой-то стандарт, которому нужно следовать?Или моя логика здесь совершенно неверна?

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Нет строгого правила или формулы для вычисления этого - как обычно, это зависит от ваших обстоятельств.

Учтите это:

  • ваша служба обычно может обслуживать несколько абонентов одновременно (в зависимости от настроек регулирования) - предположим, 10 или 20 одновременных абонентов

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

Таким образом, если 20 абонентов попытаются загрузить файл по 100 МБ каждый одновременно, ваш серверный компьютер должен будет иметь возможность использовать 2 ГБ ОЗУ одновременно. Может ли ваш сервер справиться с этим, помимо всех других обычных процессов, запущенных?

С помощью этого простого вычисления вы, вероятно, сможете сделать разумное предположение относительно того, что ограничение размера в вашем случае имеет смысл, когда переключение на потоковую передачу имеет смысл.

1 голос
/ 05 января 2011

Как говорит marc_s, это зависит от активности вашего сайта и доступной памяти.

Как личное правило, я обычно начинаю рассматривать потоковую передачу, когда средний размер начинает приближаться к 1 МБ. 5Mb - это мой предел "must stream".

...