Что означает код HRESULT 0xC00D2EF3 (NS_E_SESSION_NOT_FOUND)?

 
Предыдущий Следующий
NS_E_CANNOT_READ_PLAYLIST_FROM_MEDIASERVER NS_E_REQUIRE_STREAMING_CLIENT

NS_E_SESSION_NOT_FOUND

Практический путь диагностики NS_E_SESSION_NOT_FOUND

Диагностическая ценность NS_E_SESSION_NOT_FOUND (0xC00D2EF3) определяется точкой отказа: сервер не может найти идентификатор сеанса, переданный клиентом. Это отсутствие записи о конкретном сеансе на сервере, а не общее указание на неисправность файла или сервера.

Запрос потоковой передачи Windows Media проходит разрешение имени, выбор прокси, согласование протокола, аутентификацию, создание сеанса и доставку пакетов. WMSP и связанные протоколы хранят серверное состояние сеанса, поэтому успешное TCP-соединение не означает, что переданный идентификатор всё ещё существует. Для NS_E_SESSION_NOT_FOUND сохраните самый ранний результат нижнего уровня: оболочка может свести несколько причин к одному HRESULT.

Сетевые и протокольные данные

ЗафиксируйтеПочему это помогает выделить NS_E_SESSION_NOT_FOUND
Ответственный вызовЗапишите метод API, идентификатор объекта, поток или обратный вызов и временную метку запроса с отсутствующим сеансом.
Решающие значенияидентификатор сеанса, идентификатор и поколение элемента списка воспроизведения, серверный маркер, последовательность запросов, историю переподключений и ответ, после которого прежняя запись сеанса перестала существовать
Поколение объектаОтметьте, когда были созданы объект чтения, объект записи, граф, URL-объект, потоковый сеанс или поставщик метаданных; устаревшее состояние может снова вызвать NS_E_SESSION_NOT_FOUND после изменения конфигурации.
Первый вложенный результатСохраните самый ранний статус кодека, COM, сокета, DNS, анализатора или поставщика, появившийся до NS_E_SESSION_NOT_FOUND; более поздние сообщения интерфейса менее конкретны.
Случай для сравненияИспользуйте заведомо рабочий сеанс на том же сервере и меняйте только идентификатор или поколение, которое проверяет сервер.

Повторная проверка без смены протокольного пути

  1. Запишите 0xC00D2EF3, NS_E_SESSION_NOT_FOUND, точную операцию и время первого отказа.
  2. Сохраните идентификатор сеанса, идентификатор и поколение элемента списка воспроизведения, серверный маркер, последовательность запросов, историю переподключений и ответ, после которого прежняя запись стала недоступна.
  3. Не используйте повторно граф, сеанс, объект чтения или объект метаданных, созданные до изменения соответствующей конфигурации или ресурса.
  4. Выполните один изолированный тест: создайте новый потоковый сеанс, получите новые идентификаторы сеанса и элемента и повторите команду без прежнего состояния.
  5. Повторите проверку через тот же API и протокольный путь; другой проигрыватель или локальная копия полезны только для сравнения и сами по себе не подтверждают восстановление серверной записи сеанса.
  6. Подтвердите ожидаемое следующее состояние и сохраните новый HRESULT, если он появился, как отдельный результат следующего этапа.

Что успело выполниться

Предыдущая настройка могла завершиться успешно, а отказ возник уже при поиске переданного идентификатора на сервере. Поэтому в журнале нужны и последний успешный вызов, и NS_E_SESSION_NOT_FOUND.

Целевой контроль — создать новый потоковый сеанс, получить новые идентификаторы сеанса и элемента и повторить команду без старого состояния. Такой тест меняет спорный идентификатор, не затрагивая медиаресурс и несвязанные параметры компьютера.

Действия, которые мешают диагностике

  • Не сводите любой HRESULT потоковой передачи к потере пакетов: отдельно проверяйте DNS, подключение, ответ и серверное состояние сеанса.
  • Не затирайте первое появление NS_E_SESSION_NOT_FOUND многократными повторами; обратные вызовы и переподключения могут заменить полезное исходное состояние более поздней ошибкой верхнего уровня.
  • Не помещайте в журнал учётные данные, материалы защищённого содержимого или полные закрытые URL. Сохраняйте обезличенные идентификаторы, длины, хэши и необходимые поля протокола.

Как интерпретировать повторную проверку

Результат повторной проверкиТолкование для NS_E_SESSION_NOT_FOUND
Тот же вызов снова возвращает этот кодСервер по-прежнему не видит переданный идентификатор либо вызывающая сторона использует объект предыдущего поколения.
Новый сеанс работаетУстаревшее состояние или время жизни объекта способствовало появлению NS_E_SESSION_NOT_FOUND; исправьте пересоздание сеанса вместо общесистемного обходного решения.
Вызов доходит до другого HRESULTСервер нашёл новый сеанс, поэтому исходная граница пройдена. Новый код диагностируйте отдельно на его собственном этапе.
Сбой возникает только для одного ресурсаЭто указывает на состояние конкретного ресурса, точки публикации, потока или объекта, а не на общую недоступность сервера.

Близкие результаты не взаимозаменяемы

Главное различие: «не найден» означает отсутствие записи о сеансе на сервере; «недействителен» означает, что переданный маркер существует, но отклонён как устаревший или непригодный.

Близкий HRESULTКак его сравнивать
NS_E_CLOSED_ON_SUSPENDСравните ответственный API и первое отклонённое значение: это соседняя контрольная точка, а не автоматически та же причина, что и у NS_E_SESSION_NOT_FOUND.
NS_E_CANNOT_READ_PLAYLIST_FROM_MEDIASERVERЕсли оба кода присутствуют в одной трассировке, определите исходный по состоянию объекта и порядку операций.
NS_E_REQUIRE_STREAMING_CLIENTСохраняйте этот результат отдельно, если он появляется только после устранения условия NS_E_SESSION_NOT_FOUND.

Технические ссылки

Для NS_E_SESSION_NOT_FOUND сохраните трассировку после исправления, чтобы более поздний результат конвейера не принять за повтор отсутствующего сеанса.


Нужно найти другой код? Найти другой код состояния или ошибки.