| Предыдущий | Следующий |
| NAP_E_NOT_INITIALIZED | NAP_E_NOT_PENDING |
NAP_E_MISMATCHED_ID
Идентификаторы корреляции запроса и ответа SoH не совпадают
NAP_E_MISMATCHED_ID — это HRESULT 0x80270008 (знаковое десятичное значение -2144927736, беззнаковое десятичное значение 2150039560). AllStat на основании winerror.h описывает его так: «Идентификаторы корреляции в SoH-Request и SoH-Response не совпадают». Значение обозначает ошибку, имеет код средства 0x27 и поле кода 0x0008.
Для случая несовпадения идентификаторов запроса и ответа SoH этот HRESULT относится к устаревшей технологии Network Access Protection: NAP недоступна начиная с Windows 10, а современные выпуски Windows Server не содержат прежних ролей NAP, HRA и HCAP. Поэтому его следует учитывать при анализе корреляции поколений запроса и ответа на поддерживаемых устаревших системах, в архивной телеметрии, компонентах совместимости или проектах миграции, не ожидая наличия прежней платформы на современном компьютере.
Ответ относится к другому обмену
NAP использует CorrelationId, чтобы связать ответ Statement of Health с породившим его запросом. Пакет может быть структурно корректным, но применять его всё равно небезопасно, если идентификатор относится к другому соединению, другому поколению запроса или более ранней повторной попытке. Этот HRESULT защищает решение о применении требований от перепутывания параллельных или задержанных обменов сведениями о работоспособности.
Как теряется корреляция
- Клиент применения требований повторно использует один объект соединения для перекрывающихся обменов и перезаписывает сохранённый идентификатор корреляции.
- Задержанный ответ сервера приходит после истечения времени ожидания и связывается с более новым запросом в том же сетевом сеансе.
- При сериализации поля меняются местами или структура корреляции обрезается, хотя остальные атрибуты SoH остаются корректными.
- Посредник маршрутизирует ответы по адресу клиента, а не по полному набору идентификаторов соединения NAP и корреляции.
- Логика повторов создаёт новый идентификатор запроса, но сохраняет объект ответа от предыдущего поколения.
Данные корреляции
- Записывайте идентификаторы запроса и ответа в одном каноническом порядке байтов, а также строковый идентификатор корреляции, предназначенный для диагностики.
- Фиксируйте идентификатор соединения, идентификатор сущности применения требований, поколение запроса, время отправки и получения и транспортный сеанс.
- Храните краткую историю завершённых и просроченных идентификаторов, чтобы распознать поздний ответ, не принимая его.
- Зафиксируйте места вызова SetCorrelationId, GetCorrelationId, SetSoHRequest и SetSoHResponse для объекта соединения.
Поиск перепутанного поколения
- Проследите один запрос от создания идентификатора через сериализацию пакета, проверку сервером, десериализацию и присоединение ответа.
- Временно отключите параллельные обмены: исчезновение ошибки укажет на совместно используемое изменяемое состояние соединения или маршрутизацию.
- Сравните идентификатор отклонённого ответа с недавно просроченными идентификаторами и определите, является ли ответ поздним, а не повреждённым.
- Проверьте пулы объектов и повторное использование соединений, чтобы идентификаторы атомарно сбрасывались при каждом новом обмене.
Отличие от соседних результатов NAP
NAP_E_INVALID_PACKET относится к неверному формату данных, тогда как NAP_E_MISMATCHED_ID может возникнуть для двух полностью корректных пакетов. NAP_E_NOT_PENDING относится к завершению запроса, асинхронное состояние которого уже не существует. Совпадающий идентификатор корреляции необходим, но сам по себе ещё не доказывает, что заключение о работоспособности действительно и актуально.
Повтор и восстановление
Отклоните ответ и не обновляйте по нему состояние изоляции. После исправления дефекта маршрутизации или времени жизни можно начать новый обмен с новым идентификатором. Никогда не «исправляйте» пакет, копируя идентификатор текущего запроса в старый ответ: это уничтожает предоставляемую полем протокольную гарантию.
Практический сценарий
Два VPN-соединения применения требований проверяются параллельно, но таблица обратных вызовов индексируется только именем пользователя. Ответы меняются местами, и один путь возвращает NAP_E_MISMATCHED_ID. Индексация таблицы по соединению вместе с идентификатором корреляции восстанавливает однозначное сопоставление.
Ссылки
- Microsoft: константы ошибок NAP
- Microsoft: соединение применения требований и CorrelationId
- Microsoft: SetSoHResponse
- Microsoft: интерфейсы NAP
Нужно найти другой код? Найти другой код состояния или ошибки.