Поделиться через


Устранение неполадок платформы Sync Framework

В этом разделе приведены решения следующих распространенных проблем, возникающих в работе с платформой Sync Framework.

  • При установке платформы Sync Framework 2.0 ранее установленная версия не обновляется.

  • Управляемое приложение вызывает исключение System.Runtime.InteropServices.COMException (0x80040154)

  • Управляемое приложение вызывает исключение System.Runtime.InteropServices.COMException (0x80004002)

  • Во время отладки в 64-разрядной версии операционной системы Windows стек содержит неверные данные.

  • Платформа Sync Framework продолжает вызывать метод GetChangeBatch в бесконечном цикле.

Дополнительные справочные сведения об устранении неполадок, не упомянутых здесь, см. на веб-сайте Центра разработки Sync Framework. Дополнительные сведения о поддержке платформой Sync Framework инфраструктуры отслеживания событий для Windows (ETW) см. в разделе Компоненты трассировки платформы Sync Framework.

При установке платформы Sync Framework 2.0 ранее установленная версия не обновляется

При установке платформы Sync Framework 2.0 ранее установленная CTP-версия Sync Framework не обновляется и не удаляется.

Решение

Перед установкой окончательной версии Sync Framework 2.0 удалите все CTP-версии. Sync Framework 2.0 можно установить параллельно с версией Sync Framework 1.0.

Управляемое приложение вызывает исключение System.Runtime.InteropServices.COMException (0x80040154)

Управляемое приложение синхронизации вызывает исключение System.Runtime.InteropServices.COMException со следующим сообщением об ошибке: «Не удалось получить фабрику класса COM для компонента с идентификатором класса {565AEDBF-3108-4405-AF1F-9C2C25925DAE} в результате следующей ошибки: 80040154.»

Это исключение происходит, когда в установленном экземпляре отсутствует неуправляемый компонент синхронизации, например Synchronization.dll. Такая ситуация может возникнуть, если платформа Sync Framework была удалена или если установка не была завершена успешно.

Решение

Установите заново платформу Sync Framework. Платформу Sync Framework можно загрузить со следующего веб-сайта Майкрософт.

Управляемое приложение вызывает исключение System.Runtime.InteropServices.COMException (0x80004002)

Управляемое приложение синхронизации вызывает исключение System.Runtime.InteropServices.COMException со следующим сообщением об ошибке: «Невозможно привести COM-объект типа "Sync Framework Managed Class" к интерфейсу типа "Sync Framework COM Interop Class". Эта операция завершилась ошибкой, поскольку вызов QueryInterface в COM-компоненте для интерфейса с идентификатором "{73EA794F-1251-4466-A19C-DAEAF5BDBD04}" завершился со следующей ошибкой: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE))».

Это исключение происходит, когда объект Sync Framework создается в одном однопотоковом подразделении, а метод объекта вызывается из другого однопотокового подразделения. В этом случае платформа .NET Framework пытается упаковать объект Sync Framework и передать его от одного подразделения другому, запросив в объекте Sync Framework интерфейс IMarshal. Объекты Sync Framework не реализуют интерфейс IMarshal, и поэтому вызов метода завершается этим исключением.

Решение

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

Во время отладки в 64-разрядной версии операционной системы Windows стек содержит неверные данные

В 64-разрядной версии операционной системы Windows данные стека теряются и неправильно выводятся в отладчике.

Эта проблема происходит, когда управляемый компонент вызывает исключение, которое передается в неуправляемый компонент, а затем этот неуправляемый компонент отправляет исключение обратно в управляемый компонент. В этом случае платформа .NET Framework неправильно сохраняет данные стека в 64-разрядной версии операционной системы Windows. Поскольку управляемые компоненты платформы Sync Framework образуют оболочку для неуправляемых компонентов, используя функцию COM-взаимодействия платформы .NET Framework, то в том случае, когда определенные компоненты вызывают исключения, возникает описанная ситуация.

Частным примером данной проблемы является управляемое приложение синхронизации, которое создает канал FeedSync. В управляемом приложении реализован метод FeedIdConverter, который вызывает исключение. Исключение передается в базовый неуправляемый компонент платформы Sync Framework, а затем обратно в код управляемого приложения. В этот момент трассировка стека в отладчике неправильно отображает источник исключения.

Решение

Поскольку в этом случае нельзя правильно сохранить данные стека, необходимо использовать другую стратегию отладки, например создание пользовательского исключения, чтобы для определения источника исключения было достаточно знать его тип.

Платформа Sync Framework продолжает вызывать метод GetChangeBatch в бесконечном цикле

Во время синхронизации платформа Sync Framework постоянно вызывает метод GetChangeBatch (для управляемого кода) или метод IKnowledgeSyncProvider::GetChangeBatch (для неуправляемого кода), пока не будет получен пакет изменений, для которого метод IsLastBatch возвращает значение true (для управляемого кода) или метод ISyncChangeBatchBase::GetIsLastBatch возвращает значение TRUE (для неуправляемого кода).

Решение

Перед тем как поставщик возвратит последний пакет изменений, он должен использовать метод SetLastBatch (для управляемого кода) или метод ISyncChangeBatchBase::SetLastBatch (для неуправляемого кода), чтобы пометить пакет в качестве последнего.

См. также

Основные положения

Платформа Microsoft Sync Framework