Что означает код HRESULT 0x8001000A (RPC_E_CANTTRANSMIT_CALL)?

 
Предыдущий Следующий
RPC_E_INVALID_DATAPACKET RPC_E_CLIENT_CANTMARSHAL_DATA

RPC_E_CANTTRANSMIT_CALL

Что означает RPC_E_CANTTRANSMIT_CALL

RPC_E_CANTTRANSMIT_CALL (0X8001000A) означает, что COM не смогла передать вызов: очередь сообщений оставалась заполненной и не освободилась даже после уступки времени выполнения. Это прежде всего проблема dispatch/backpressure, а не общий отказ marshaling.

Что проверить

  • Снимите состояние STA/UI-потока, который должен dispatch-ить сообщения: длинный синхронный handler, modal loop или рекурсивный вызов могут не давать очереди разгружаться.
  • Измерьте глубину/скорость поступления вызовов и время обработки одного сообщения. Если ошибка исчезает при снижении потока запросов, ищите saturation, а не регистрацию интерфейса.
  • Проверьте reentrancy и вложенные межапартаментные вызовы: длительная блокировка owning STA может сделать корректный proxy фактически недоступным для новых calls.

Контрольный тест — тот же interface/method с прежними параметрами после устранения блокировки message pump. Если вызов передаётся без изменения proxy/stub и typelib, причина была именно в очереди.

Ссылки по этому результату


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