Что означает код HRESULT 0x80010117 (RPC_E_CALL_COMPLETE)?

 
Предыдущий Следующий
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 и сохранённым полям.

  1. Зафиксируйте первый RPC_E_CALL_COMPLETE и объект, которому принадлежит маркер «call complete».
  2. Сохраните входные данные и lifecycle-state до изменения условия «call context запрошен уже после завершения вызова».
  3. Измените только состояние, связанное с «call context запрошен уже после завершения вызова», и выполните тот же вызов ещё раз.

После исправления

Не replay-те неидемпотентный remote method, пока неясно, завершился ли предыдущий вызов на сервере. Исправление считается реальным, когда прежняя граница «call context запрошен уже после завершения вызова» пройдена на сопоставимом входе, а не просто скрыта более общим сообщением.

Документация


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