| Предыдущий | Следующий |
| 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; более поздние сообщения интерфейса менее конкретны. |
| Случай для сравнения | Используйте заведомо рабочий сеанс на том же сервере и меняйте только идентификатор или поколение, которое проверяет сервер. |
Повторная проверка без смены протокольного пути
- Запишите
0xC00D2EF3,NS_E_SESSION_NOT_FOUND, точную операцию и время первого отказа. - Сохраните идентификатор сеанса, идентификатор и поколение элемента списка воспроизведения, серверный маркер, последовательность запросов, историю переподключений и ответ, после которого прежняя запись стала недоступна.
- Не используйте повторно граф, сеанс, объект чтения или объект метаданных, созданные до изменения соответствующей конфигурации или ресурса.
- Выполните один изолированный тест: создайте новый потоковый сеанс, получите новые идентификаторы сеанса и элемента и повторите команду без прежнего состояния.
- Повторите проверку через тот же API и протокольный путь; другой проигрыватель или локальная копия полезны только для сравнения и сами по себе не подтверждают восстановление серверной записи сеанса.
- Подтвердите ожидаемое следующее состояние и сохраните новый 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. |
Технические ссылки
- Обзор протокола потоковой передачи Windows Media по HTTP
- Получение ответа WMSP
- Взаимодействие Windows Media с прокси-сервером
- Связи протоколов потоковой передачи Windows Media
- Реестр HRESULT Microsoft
Для NS_E_SESSION_NOT_FOUND сохраните трассировку после исправления, чтобы более поздний результат конвейера не принять за повтор отсутствующего сеанса.
Нужно найти другой код? Найти другой код состояния или ошибки.
