Что означает код HRESULT 0x8001000C (RPC_E_CLIENT_CANTUNMARSHAL_DATA)?

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

RPC_E_CLIENT_CANTUNMARSHAL_DATA

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

RPC_E_CLIENT_CANTUNMARSHAL_DATA — HRESULT, относящийся к области COM/RPC. COM-клиент не смог распаковать данные ответа, возвращённые сервером.

Для RPC_E_CLIENT_CANTUNMARSHAL_DATA этот HRESULT возвращён инфраструктурой COM. Применительно к RPC_E_CLIENT_CANTUNMARSHAL_DATA полезная причина определяется границей процесса/апартамента, интерфейсом, методом и тем, какая сторона не смогла маршалировать данные.

Практический вывод для RPC_E_CLIENT_CANTUNMARSHAL_DATA: этот HRESULT фиксирует описанное условие, но сам по себе не показывает, какой участник операции первым нарушил контракт. Для RPC_E_CLIENT_CANTUNMARSHAL_DATA найдите первый вызов, вернувший статус, и только после этого меняйте конфигурацию подсистемы COM/RPC.

Как читать имя RPC_E_CLIENT_CANTUNMARSHAL_DATA

Имя RPC_E_CLIENT_CANTUNMARSHAL_DATA помогает сузить поиск: CLIENT — клиентская сторона; CANTUNMARSHAL — технический маркер «cantunmarshal»; DATA — данные. Эти части имени не заменяют документацию API, но позволяют проверить, что журнал и код относятся к одному и тому же условию.

Особенность RPC_E_CLIENT_CANTUNMARSHAL_DATA

Сверьте proxy/stub, type library и версии интерфейса на обеих сторонах, особенно после изменения out-параметров или custom marshaling. Если метод мог изменить серверное состояние до ошибки распаковки ответа, перед retry сначала запросите фактический итог или примените idempotency key.

Разбор условия ошибки

Для RPC_E_CLIENT_CANTUNMARSHAL_DATA важно сохранить исходный контекст вызова: имя функции, параметры, состояние объекта и первый низкоуровневый статус. Применительно к RPC_E_CLIENT_CANTUNMARSHAL_DATA без этого одинаковый HRESULT может ошибочно связываться с разными причинами.

  • При разборе RPC_E_CLIENT_CANTUNMARSHAL_DATA сверьте типы, размеры и время жизни всех входных/выходных параметров, особенно указателей и пользовательских структур.
  • При разборе RPC_E_CLIENT_CANTUNMARSHAL_DATA после разрыва соединения или отключения объекта создайте новый COM-прокси, а не повторяйте вызов через старый.
  • При разборе RPC_E_CLIENT_CANTUNMARSHAL_DATA запишите CLSID/IID, номер метода, границу процесса или апартамента и сторону, на которой получен HRESULT.
  • При разборе RPC_E_CLIENT_CANTUNMARSHAL_DATA проверьте регистрацию интерфейса и proxy/stub, разрядность компонентов и совместимость type library.

Какие данные собрать

  • Для RPC_E_CLIENT_CANTUNMARSHAL_DATA включите журналирование RPC/COM только на время воспроизведения и зафиксируйте идентификатор интерфейса.
  • Для RPC_E_CLIENT_CANTUNMARSHAL_DATA проверьте тот же метод in-proc или с минимальными параметрами, чтобы локализовать маршалинг.
  • Для RPC_E_CLIENT_CANTUNMARSHAL_DATA соберите дампы клиента и сервера вокруг первого сбоя и сохраните correlation между вызовами.

Критерий успешного исправления

Для RPC_E_CLIENT_CANTUNMARSHAL_DATA считайте причину RPC_E_CLIENT_CANTUNMARSHAL_DATA устранённой только после проверки на тех же данных и под той же учётной записью, где возник сбой, а затем выполните контрольный тест с заведомо неверным входом.

Ссылки по RPC_E_CLIENT_CANTUNMARSHAL_DATA


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