| Предыдущий | Следующий |
| NS_E_TOO_MUCH_DATA_FROM_SERVER | NS_E_PROXY_CONNECT_TIMEOUT |
NS_E_CONNECT_TIMEOUT
NS_E_CONNECT_TIMEOUT: данные, граница и повторная проверка
Практический смысл NS_E_CONNECT_TIMEOUT (0xC00D2F06) состоит не в том, что «мультимедиа не работает», а в том, что соединение с медиасервером не было установлено до истечения заданного времени. Это помещает сбой в контрольную точку потоковой передачи connect timeout и сужает набор данных, которые нужно собрать до изменения состояния следующей попыткой.
При контролируемой повторной проверке connect timeout запрос потоковой передачи Windows Media проходит разрешение имён, выбор прокси, согласование протокола, аутентификацию, создание сеанса и доставку пакетов. WMSP и связанные протоколы сохраняют состояние сеанса, поэтому одно лишь допустимое TCP-соединение не подтверждает наличие пригодного мультимедийного сеанса при сборе данных о connect timeout. В случае NS_E_CONNECT_TIMEOUT сохраните самый ранний результат нижнего уровня, поскольку оболочки могут сопоставить несколько разных причин одному HRESULT до закрытия инцидента connect timeout.
Сетевые и протокольные данные
| Что зафиксировать | Как это помогает выделить NS_E_CONNECT_TIMEOUT |
|---|---|
| Ответственный вызов | Запишите метод API, идентичность объекта, поток или обратный вызов и метку времени для контрольной точки потоковой передачи connect timeout. |
| Решающие значения | исходный URL, выбранный протокол, режим прокси, разрешённые конечные точки, время соединения и ответа, состояние аутентификации, идентификатор сеанса и первый результат сокета или протокола при выделении случая connect timeout. |
| Поколение объекта | Отметьте, когда были созданы объект чтения, записи, граф, объект URL, сеанс потоковой передачи или поставщик метаданных; устаревшее состояние может повторно вызывать NS_E_CONNECT_TIMEOUT после изменения конфигурации. |
| Первый вложенный результат | Сохраните самый ранний статус кодека, COM, сокета, DNS, анализатора или поставщика до NS_E_CONNECT_TIMEOUT; более поздние сообщения интерфейса менее конкретны. |
| Случай для сравнения | Используйте один заведомо исправный ресурс, проходящий ту же контрольную точку потоковой передачи connect timeout, и измените только отклонённое предусловие. |
Анатомия сбоя
Контрольная точка потоковой передачи connect timeout достигается, когда соединение с медиасервером не установлено до истечения заданного времени. После NS_E_CONNECT_TIMEOUT вызывающий код не должен предполагать, что следующий фильтр, пакет, сеанс или состояние метаданных существует.
В качестве отрицательного контрольного теста в диагностической записи connect timeout проверьте установление TCP-соединения с точно выбранной конечной точкой и сравните метки времени с настроенным пределом соединения. Более поздний HRESULT означает, что эта контрольная точка пройдена, а новый результат относится к другой стадии при выделении случая connect timeout.
Близкие результаты не взаимозаменяемы
Главное различие: тайм-аут соединения возникает до появления сеанса; тайм-аут прокси может возникнуть после того, как прокси принял запрос клиента в контрольной точке connect timeout.
| Близкий HRESULT | Как его сравнивать |
|---|---|
NS_E_TOO_MANY_HOPS | Сравните ответственный API и первое отклонённое значение; это соседняя контрольная точка, а не обязательно та же причина, что и у NS_E_CONNECT_TIMEOUT. |
NS_E_TOO_MUCH_DATA_FROM_SERVER | По состоянию объекта и порядку операций определите, какой код является определяющим, если оба появляются в одной трассировке при контролируемой повторной проверке connect timeout. |
NS_E_PROXY_CONNECT_TIMEOUT | Сохраните этот результат отдельно, если он появляется только после устранения условия NS_E_CONNECT_TIMEOUT. |
Повторная проверка с сохранением протокола
- Запишите
0xC00D2F06,NS_E_CONNECT_TIMEOUT, точную операцию и время первого сбоя до закрытия инцидента connect timeout. - Сохраните исходный URL, выбранный протокол, режим прокси, разрешённые конечные точки, время соединения и ответа, состояние аутентификации, идентификатор сеанса и первый результат сокета или протокола в диагностической записи connect timeout.
- Не используйте повторно граф, сеанс, объект чтения или объект метаданных, созданный до изменения соответствующей конфигурации или ресурса, при выделении случая connect timeout.
- Выполните один изолированный тест: проверьте установление TCP-соединения с точно выбранной конечной точкой и сравните метки времени с настроенным пределом соединения в контрольной точке connect timeout.
- Повторите действие через тот же API и тот же протокольный путь; другой проигрыватель или локальная копия полезны только для сравнения, но не доказывают исправление контрольной точки потоковой передачи connect timeout.
- Подтвердите ожидаемое следующее состояние и сохраните любой новый HRESULT как отдельный последующий результат при контролируемой повторной проверке connect timeout.
Интерпретация следующего сетевого состояния
| Результат повторной проверки | Толкование для NS_E_CONNECT_TIMEOUT |
|---|---|
| Тот же вызов по-прежнему возвращает код | Значения, управляющие контрольной точкой потоковой передачи connect timeout, не изменились либо вызывающий код по-прежнему использует старое поколение объекта. |
| Новый объект работает успешно | Время жизни или кэшированное состояние способствовало появлению NS_E_CONNECT_TIMEOUT; исправьте повторное создание объекта вместо применения обходного решения ко всей системе до закрытия инцидента connect timeout. |
| Вызов доходит до другого HRESULT | Граница контрольной точки потоковой передачи connect timeout пройдена. Диагностируйте новый код на его собственной стадии формата, графа, URL, сети или метаданных при выделении случая connect timeout. |
| Ошибка возникает только для одного ресурса | Данные указывают на состояние конкретного содержимого, URL, точки публикации, потока, атрибута или объекта, а не на общий отказ в контрольной точке connect timeout. |
Действия, вводящие в заблуждение
- не считайте каждый HRESULT потоковой передачи обычной потерей пакетов, не разделив стадии DNS, соединения, ответа и сеанса при трассировке пути connect timeout.
- Не стирайте данные о первом появлении
NS_E_CONNECT_TIMEOUTмногократными повторными попытками; обратные вызовы и повторные соединения могут заменить полезное состояние более поздней обобщающей ошибкой при контролируемой проверке connect timeout. - Не публикуйте учётные данные, материалы защищённого содержимого или полные частные URL при сборе данных о connect timeout. Записывайте обезличенные идентификаторы, длины, хэши и поля протокола, необходимые для воспроизведения контрольной точки потоковой передачи connect timeout.
Технические источники
- Обзор протокола потоковой передачи Windows Media по HTTP
- Получение ответа WMSP
- Взаимодействие Windows Media с прокси
- Связи протоколов потоковой передачи Windows Media
- Реестр HRESULT Microsoft
Считайте NS_E_CONNECT_TIMEOUT устранённым только тогда, когда тот же путь API проходит эту контрольную точку; успех в другом проигрывателе или с кэшированной копией является лишь дополнительным подтверждением в диагностической записи connect timeout.
Нужно найти другой код? Найти другой код состояния или ошибки.