| Предыдущий | Следующий |
| RPC_S_WAITONTIMER | RPC_E_UNSECURE_CALL |
RPC_E_CALL_COMPLETE
Точная граница результата
Практический смысл RPC_E_CALL_COMPLETE (0X80010117): call context запрошен уже после завершения вызова. В трассировке отделяйте маркер «call complete» от последующих wrapper/UI ошибок: они могут появиться уже после первичной границы и не объясняют исходное состояние.
Что сохранить
До повторной попытки запишите COM interface/method, apartment, marshaling path, call context и security state. Для условия «call context запрошен уже после завершения вызова» эти данные важнее общего текста сообщения, потому что позволяют связать результат с конкретным владельцем операции.
- interface/method, proxy identity и call correlation ID.
- origin/current thread, apartment и marshaling path.
- call context, message-filter/security state и первый remote HRESULT.
| Наблюдение | Что оно означает |
|---|---|
| Первый вызов возвращает RPC_E_CALL_COMPLETE | Граница «call context запрошен уже после завершения вызова» относится к текущему объекту и generation; сохраните это состояние до cleanup. |
| После одного целевого изменения код исчезает | Связь с условием «call context запрошен уже после завершения вызова» подтверждается только если остальные входы и owning context не изменились. |
| Первым становится другой HRESULT | Считайте его новой первичной границей; маркер «call complete» больше не должен подменять причину следующего отказа. |
Сравнение двух запусков
Контрольный запуск должен воспроизводить «call context запрошен уже после завершения вызова» на тех же исходных данных. Затем исправьте call context, marshaling, apartment или security precondition и повторите тот же метод. Если операция проходит прежнюю стадию, гипотеза локализована; если нет — вернитесь к первому HRESULT и сохранённым полям.
- Зафиксируйте первый
RPC_E_CALL_COMPLETEи объект, которому принадлежит маркер «call complete». - Сохраните входные данные и lifecycle-state до изменения условия «call context запрошен уже после завершения вызова».
- Измените только состояние, связанное с «call context запрошен уже после завершения вызова», и выполните тот же вызов ещё раз.
После исправления
Не replay-те неидемпотентный remote method, пока неясно, завершился ли предыдущий вызов на сервере. Исправление считается реальным, когда прежняя граница «call context запрошен уже после завершения вызова» пройдена на сопоставимом входе, а не просто скрыта более общим сообщением.
Документация
- Microsoft: COM RPC error codes.
- Microsoft: IMessageFilter.
- Microsoft: RetryRejectedCall.
- Microsoft: CoInitialize.
- Microsoft: CoInitializeSecurity.
Нужно найти другой код? Найти другой код состояния или ошибки.