Размеры и тайм-ауты для контракта на потоковую передачу в WCF - PullRequest
5 голосов
/ 18 февраля 2009

В настоящее время я работаю над небольшим проектом, где мне нужно отправить потенциально большой файл через Интернет.

После некоторых дискуссий я решил использовать потоковую передачу вместо чанкинга. Файлы могут быть очень большими, я не хочу указывать точную верхнюю границу, 2 ГБ, может быть, 4 ГБ, кто знает.

Естественно, это может занять много времени. Опять же, я не хочу иметь тайм-аут. Это просто занимает столько времени, это не имеет значения.

Пока я пробовал разные файлы разного размера, я медленно, шаг за шагом настраивал свойства моего BasicHttpBinding. Мне просто интересно, являются ли ценности, с которыми я придумал, в целом нормальными, или они абсолютно злые?

transferMode="Streamed"
sendTimeout="10675199.02:48:05.4775807"
receiveTimeout="10675199.02:48:05.4775807"
openTimeout="10675199.02:48:05.4775807"
closeTimeout="10675199.02:48:05.4775807"
maxReceivedMessageSize="9223372036854775807"

Это просто как-то не правильно, это просто максимально возможные значения для каждой базовой структуры данных. Но я не знаю, что еще делать.

Итак, еще раз:

Это в основном правильный подход? Или я полностью неправильно понял и неправильно использовал здесь фреймворк?

Спасибо

Ответы [ 2 ]

2 голосов
/ 18 февраля 2009

Что ж, более естественным подходом может быть отправка файла в последовательности кусками среднего размера с последующим сообщением для фиксации; это также позволяет возобновить работу с ошибкой. Возможно, есть небольшая проблема DOS с полностью открытыми числами ...

0 голосов
/ 21 января 2010

У меня уже есть проблема с потоковой передачей, когда соединение между клиентом WCF и сервером проходит через VPN. Если интересно, читайте подробнее в этой теме .

Если поток достаточно велик для потоковой передачи более минуты - возникает исключение.

...