У меня есть служба WCF, используемая в основном для управления документами в хранилище.
Я использовал пример канала чанкинга от MS, чтобы я мог загружать / скачивать огромные файлы.
Теперь я внедрил надежную сессию со службой и вижу странное поведение.
Вот значения времени ожидания, которые я использую.
this.SendTimeout = new TimeSpan(0,10,0);
this.OpenTimeout = new TimeSpan(0, 1, 0);
this.CloseTimeout = new TimeSpan(0, 1, 0);
this.ReceiveTimeout = new TimeSpan(0,10, 0);
reliableBe.InactivityTimeout = new TimeSpan(0,2,0);
У меня есть следующие проблемы:
1. Если служба не запущена и не работает, клиенты не отключаются после OpenTimeout.
Я попробовал это с моим тестовым клиентом.
Сценарий 1: Без надежного сеанса:
Я получаю следующее исключение:
Не удалось подключиться к net.tcp: // localhost: 8788 / MediaManagementService / ep1. Попытка подключения продолжалась в течение промежутка времени 00: 00: 00.9848790. Код ошибки TCP 10061: Соединение не может быть установлено, потому что целевая машина активно отказалась от него 127.0.0.1:8788
Это правильное поведение, поскольку я дал OpenTimeout 1 сек.
Сценарий 2: С ReliableSession:
Я получаю то же исключение:
Не удалось подключиться к net.tcp: // localhost: 8788 / MediaManagementService / ep1. Попытка подключения продолжалась в течение промежутка времени 00: 00: 00.9692460. Код ошибки TCP 10061: не удалось установить соединение, поскольку целевая машина активно отказала ему в этом. 127.0.0.1:8788.
Но это сообщение приходит примерно через 10 минут. (Я верю после SendTimeout)
Поэтому здесь я только что включил надежный сеанс, и теперь он выглядит как OpenTimeout = SendTimeout для клиента.
Это желаемое поведение?
2: ошибка при загрузке огромных файлов с помощью ReliableSession:
Общее правило заключается в том, что вы должны установить огромное значение для maxReceivedMessageSize, SendTimeout и ReceiveTimeout.
Но в случае канала Chunking максимальный размер принятого сообщения не имеет значения, так как данные отправляются кусками.
Поэтому я установил огромное значение для Send и ReceiveTimeout: скажем, 10 часов.
Теперь загрузка идет нормально, но у нее есть побочный эффект, который, даже если Служба не работает, требует 10 часов для тайм-аута соединения клиента из-за поведения, упомянутого в (1).
Пожалуйста, дайте мне знать ваши мысли об этом поведении.