다음을 통해 공유


Sync Framework 문제 해결

이 항목에서는 Sync Framework를 사용할 때 발생할 수 있는 다음과 같은 일반적인 문제에 대한 해결 방법을 설명합니다.

  • Sync Framework2.0을 설치해도 이전에 설치된 버전이 업그레이드되지 않는 경우

  • 관리되는 응용 프로그램에서 System.Runtime.InteropServices.COMException(0x80040154)이 발생하는 경우

  • 관리되는 응용 프로그램에서 System.Runtime.InteropServices.COMException(0x80004002)이 발생하는 경우

  • 64비트 버전의 Windows 운영 체제에서 디버깅할 때 스택 정보가 잘못된 경우

  • Sync Framework가 무한 루프에서 GetChangeBatch를 반복하여 호출하는 경우

여기에 나열되지 않은 문제에 대한 해결 방법은 Sync Framework 개발자 센터를 참조하십시오. ETW(Windows용 이벤트 추적) 인프라의 Sync Framework 지원에 대한 자세한 내용은 Sync Framework 구성 요소 추적을 참조하십시오.

Sync Framework 2.0을 설치해도 이전에 설치된 버전이 업그레이드되지 않는 경우

Sync Framework 2.0을 설치할 때 이전에 설치된 Sync Framework CTP 버전이 제거되거나 업그레이드되지 않습니다.

해결 방법

최종 릴리스 버전을 설치하기 전에 Sync Framework 2.0의 모든 CTP 버전을 제거합니다. Sync Framework 2.0은 Sync Framework 1.0과 함께 설치할 수 있습니다.

관리되는 응용 프로그램에서 System.Runtime.InteropServices.COMException(0x80040154)이 발생하는 경우

관리되는 동기화 응용 프로그램에서 "80040154 오류로 인해 CLSID가 {565AEDBF-3108-4405-AF1F-9C2C25925DAE}인 구성 요소의 COM 클래스 팩터리를 검색하지 못했습니다." 오류 메시지와 함께 System.Runtime.InteropServices.COMException이 발생합니다.

이 예외는 Synchronization.dll과 같은 관리되지 않는 동기화 구성 요소가 설치되지 않은 경우에 발생합니다. Sync Framework가 제거되었거나 설치에 완전히 성공하지 못한 경우일 수 있습니다.

해결 방법

Sync Framework를 다시 설치합니다. Sync Framework는 이 Microsoft 웹 사이트에서 다운로드할 수 있습니다.

관리되는 응용 프로그램에서 System.Runtime.InteropServices.COMException(0x80004002)이 발생하는 경우

관리되는 동기화 응용 프로그램에서 "'Sync Framework Managed Class' 형식의 COM 개체를 인터페이스 형식 'Sync Framework COM Interop Class'(으)로 캐스팅할 수 없습니다." 오류 메시지와 함께 System.Runtime.InteropServices.COMException이 발생합니다. 지원되지 않는 인터페이스입니다. (예외가 발생한 HRESULT: 0x80004002 (E_NOINTERFACE)) 오류로 인해 IID가 '{73EA794F-1251-4466-A19C-DAEAF5BDBD04}'인 인터페이스의 COM 구성 요소에서 QueryInterface를 호출하지 못했으므로 이 작업을 수행할 수 없습니다.

이 예외는 단일 스레드 아파트 중 하나에서 Sync Framework 개체를 만들었는데 다른 단일 스레드 아파트에서 개체의 메서드를 호출한 경우에 발생합니다. 이러한 경우 .NET Framework에서는 Sync Framework 개체에서 IMarshal 인터페이스를 쿼리하여 아파트 간에 Sync Framework 개체를 마샬링하려고 합니다. Sync Framework 개체는 IMarshal을 구현하지 않으므로 호출이 실패하고 이 예외가 발생합니다.

해결 방법

MTA(다중 스레드 아파트) 스레드를 사용합니다. MTA 스레드에는 마샬링이 필요하지 않습니다.

64비트 버전의 Windows 운영 체제에서 디버깅할 때 스택 정보가 잘못된 경우

64비트 버전의 Windows 운영 체제에서 스택 정보가 손실되고 디버거에서 잘못 표시됩니다.

이 문제는 관리되는 구성 요소가 관리되지 않는 구성 요소로 전달되는 예외를 발생시킨 다음 관리되지 않는 구성 요소에서 관리되는 구성 요소로 예외를 다시 발생시킬 때 발생합니다. 이러한 경우 .NET Framework에서는 64비트 버전의 Windows 운영 체제에서 스택 정보를 올바르게 유지하지 않습니다. Sync Framework의 관리되는 구성 요소는 .NET Framework의 COM interop 기능을 사용하여 관리되지 않는 구성 요소를 래핑하므로 관리되는 특정 구성 요소에서 예외가 발생하면 이러한 상황이 발생합니다.

이 문제의 구체적인 예는 FeedSync 피드를 생성하는 관리되는 동기화 응용 프로그램입니다. 관리되는 응용 프로그램은 예외가 발생하는 FeedIdConverter 메서드를 구현합니다. 이 예외는 Sync Framework의 관리되지 않는 내부 구성 요소에 발생한 다음 관리되는 응용 프로그램 코드에 다시 발생합니다. 이 시점에서 디버거의 스택 추적에 예외의 출처가 제대로 표시되지 않습니다.

해결 방법

이 경우에는 스택 정보를 올바르게 유지할 수 없으므로 다른 디버깅 전략을 사용해야 합니다. 예를 들어 예외의 종류만으로도 예외의 출처를 판단할 수 있도록 사용자 지정 예외를 발생시킬 수 있습니다.

Sync Framework가 무한 루프에서 GetChangeBatch를 반복하여 호출하는 경우

동기화 중에 Sync Framework에서는 IsLastBatch(관리 코드의 경우)에서 true를 반환하거나 ISyncChangeBatchBase::GetIsLastBatch(비관리 코드의 경우)에서 TRUE를 반환하는 변경 내용 일괄 처리를 수신할 때까지 GetChangeBatch(관리 코드의 경우) 또는 IKnowledgeSyncProvider::GetChangeBatch(비관리 코드의 경우)를 반복하여 호출합니다.

해결 방법

공급자는 마지막 변경 내용 일괄 처리를 반환하기 전에 SetLastBatch(관리 코드의 경우) 또는 ISyncChangeBatchBase::SetLastBatch(비관리 코드의 경우)를 사용하여 마지막 변경 내용 일괄 처리임을 표시해야 합니다.

참고 항목

개념

Microsoft Sync Framework