Поделиться через


Предотвращение нескольких отправки

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

Если клиент BITS подключается к тому же серверу, что и раньше, сервер распознает идентификатор сеанса, а отправка возобновляется с точки прерывания. Однако если клиент подключается к другому серверу, клиент должен запустить отправку с самого начала, так как новый сервер не имеет контекста сеанса или ранее отправленных данных. BITS может подключаться к другому серверу, если сервер BITS размещается в веб-ферме, а свойство расширения СЛУЖБ IIS BITS, BITSHostId, не задано. Свойство BITSHostId предотвращает перезапуск, заставляя клиент BITS подключаться к уникальному адресу предыдущего сервера вместо общего адреса сервера.

Сервер BITS попытается отправить файл отправки только один раз в серверное приложение, но возможно, что файл может отправляться несколько раз. Это может произойти, например, если сервер BITS отправляет файл в серверное приложение, а затем завершает работу, ожидая ответа от серверного приложения. Клиент BITS получит код ошибки из уровня HTTP и повторите отправку после задержки. Если сервер остается в автономном режиме дольше, чем время ожидания BITSHostIdFallbackTimeout , клиент в конечном итоге отправит запрос на общий адрес сервера. Другой сервер BITS получит файл и снова доставляет его в серверное приложение.

Аналогичный случай может возникать даже с одним интерфейсным сервером. Например, когда клиент отправил весь файл на сервер, последний блок приводит к переадресации файла в серверное приложение. Если сервер BITS или серверное приложение завершаются после обработки файла, но до отправки подтверждения клиенту клиент получит код ошибки и повторите попытку позже. При повторных попытках клиента сервер BITS увидит, что последний блок был отправлен, и он снова перенаправит файл в серверное приложение. Если получение файла отправки несколько раз является проблемой для серверного приложения, следует рассмотреть возможность включения идентификатора транзакции в данные.