| Предыдущий | Следующий |
| RPC_E_INVALID_EXTENSION | RPC_E_INVALID_OBJECT |
RPC_E_INVALID_IPID
Точка в workflow
Практический смысл RPC_E_INVALID_IPID (0X80010113): запрошенный IPID интерфейса больше не существует или недействителен. В трассировке отделяйте маркер «invalid ipid» от последующих wrapper/UI ошибок: они могут появиться уже после первичной границы и не объясняют исходное состояние.
Диагностический пакет
До повторной попытки запишите COM interface/method, apartment, marshaling path, call context и security state. Для условия «запрошенный IPID интерфейса больше не существует или недействителен» эти данные важнее общего текста сообщения, потому что позволяют связать результат с конкретным владельцем операции.
- interface/method, proxy identity и call correlation ID.
- origin/current thread, apartment и marshaling path.
- call context, message-filter/security state и первый remote HRESULT.
| Наблюдение | Что оно означает |
|---|---|
| Первый вызов возвращает RPC_E_INVALID_IPID | Граница «запрошенный IPID интерфейса больше не существует или недействителен» относится к текущему объекту и generation; сохраните это состояние до cleanup. |
| После одного целевого изменения код исчезает | Связь с условием «запрошенный IPID интерфейса больше не существует или недействителен» подтверждается только если остальные входы и owning context не изменились. |
| Первым становится другой HRESULT | Считайте его новой первичной границей; маркер «invalid ipid» больше не должен подменять причину следующего отказа. |
Специфическая проверка для этого кода
Сохраните IPID, OXID/OID, proxy generation и момент disconnect/release. IPID идентифицирует конкретный интерфейс объекта и может устареть при remarshal. Контроль — получить свежий interface pointer через штатный marshal/QueryInterface, не подставляя старый IPID вручную.
Контрольный запуск
Контрольный запуск должен воспроизводить «запрошенный IPID интерфейса больше не существует или недействителен» на тех же исходных данных. Затем исправьте только поле, структуру, token или registration value, которое отклонил компонент. Если операция проходит прежнюю стадию, гипотеза локализована; если нет — вернитесь к первому HRESULT и сохранённым полям.
- Зафиксируйте первый
RPC_E_INVALID_IPIDи объект, которому принадлежит маркер «invalid ipid». - Сохраните входные данные и lifecycle-state до изменения условия «запрошенный IPID интерфейса больше не существует или недействителен».
- Измените только состояние, связанное с «запрошенный IPID интерфейса больше не существует или недействителен», и выполните тот же вызов ещё раз.
Завершение проверки
Не replay-те неидемпотентный remote method, пока неясно, завершился ли предыдущий вызов на сервере. Исправление считается реальным, когда прежняя граница «запрошенный IPID интерфейса больше не существует или недействителен» пройдена на сопоставимом входе, а не просто скрыта более общим сообщением.
Документация
- Microsoft: COM RPC error codes.
- Microsoft: IMessageFilter.
- Microsoft: RetryRejectedCall.
- Microsoft: CoInitialize.
- Microsoft: CoInitializeSecurity.
Нужно найти другой код? Найти другой код состояния или ошибки.