충돌 처리
동기화 커뮤니티에서 항목에 대한 변경 내용이 올바로 전파되도록 하려면 원본 공급자에서 받은 항목과 대상 복제본의 항목 간에 발생하는 충돌을 대상 공급자에서 검색하고 처리해야 합니다. Sync Framework에서는 충돌을 검색하고 처리하는 데 필요한 대부분의 작업을 수행하는 변경 내용 적용자 개체를 제공합니다.
Sync Framework에서는 동기화 중에 발생할 수 있는 동시성 충돌과 제약 조건 충돌이라는 두 가지 범주의 충돌을 지원합니다. 나중에 동기화되는 서로 다른 두 복제본에서 같은 항목 또는 변경 단위가 변경될 경우 동시성 충돌이 발생합니다. 제약 조건 충돌은 항목 또는 변경 단위에 적용되는 제약 조건(예: 파일 시스템 내에서 폴더의 관계 또는 이름이 같은 데이터의 위치 등)을 위반하는 충돌입니다.
Sync Framework에서는 두 가지 방법으로 동기화 응용 프로그램에서 충돌을 처리할 수 있습니다. 하나는 세션 중에 발생하는 모든 충돌에 적용되는 충돌 해결 정책을 설정하는 것이고, 다른 하나는 충돌이 검색될 때마다 알림을 받도록 등록하여 각 충돌을 개별적으로 검사하고 해결하는 것입니다.
충돌 처리 실행 흐름
충돌은 동기화의 변경 내용 적용 단계에서 검색되고 처리됩니다. 일반적으로 대상 공급자의 ProcessChangeBatch(관리 코드의 경우) 또는 ProcessChangeBatch(비관리 코드의 경우) 메서드에서 발생합니다.
대상 공급자가 Sync Framework 변경 내용 적용자를 사용하면 일괄 변경 내용의 각 항목에 대해 다음 단계가 수행됩니다.
변경 내용 적용자가 대상 복제본의 항목 업데이트로 인해 항목과 원본 변경 내용의 동시성 충돌이 발생하는지 여부를 확인합니다. 예를 들어 원본 및 대상 복제본 모두에서 로컬로 항목이 변경되었으면 업데이트-업데이트 충돌이 검색됩니다.
응용 프로그램에서 동시성 충돌에 대한 충돌 해결 정책을 지정한 경우 변경 내용 적용자가 정책을 기반으로 충돌 해결 동작을 할당합니다. 그렇지 않으면 변경 내용 적용자가 응용 프로그램에 충돌을 알리고 응용 프로그램에서 충돌 처리 동작을 지정합니다.
변경 내용 적용자가 호출을 대상 공급자로 디스패치하여 충돌 해결 동작을 기반으로 변경 내용을 적용합니다. 예를 들어 대상 복제본에서 항목을 삭제하고 원본 공급자의 항목으로 바꿉니다.
대상 공급자가 대상 복제본에 변경 내용을 적용하면 대상 공급자가 제약 조건 충돌을 검색합니다. 예를 들어 원본 변경 내용이 id1로 식별되고 이름이 "FavoriteBooks"인데 대상 복제본에도 이름이 "FavoriteBooks"인 id2로 식별되는 항목이 있다면 대상 복제본에서는 두 항목의 이름이 같으므로 이러한 항목을 같은 것으로 인식하지만 Sync Framework에서는 두 항목의 항목 ID가 서로 다르므로 다른 것으로 인식합니다. 대상 공급자는 변경 내용 적용자에 제약 조건 충돌을 보고합니다.
응용 프로그램에서 중복 충돌 해결 정책을 지정한 경우 제약 조건 충돌이 중복 충돌 때문이면 변경 내용 적용자가 정책을 기반으로 충돌 해결 동작을 할당합니다. 그렇지 않으면 변경 내용 적용자가 응용 프로그램에 충돌을 알리고 응용 프로그램에서 충돌 처리 동작을 지정합니다.
변경 내용 적용자가 호출을 대상 공급자로 디스패치하여 충돌 해결 동작을 기반으로 변경 내용을 적용합니다.
동시성 충돌을 처리하는 방법에 대한 자세한 내용은 동시성 충돌 검색 및 해결을 참조하십시오.
제약 조건 충돌을 처리하는 방법에 대한 자세한 내용은 제약 조건 충돌 검색 및 해결을 참조하십시오.
변경 단위를 사용하여 충돌 줄이기
하위 항목 변경 내용을 나타내는 변경 단위를 사용하면 충돌 횟수를 줄일 수 있습니다. 변경 단위를 사용하면 전체 항목이 아닌 변경 단위의 버전이 추적됩니다. 따라서 같은 항목 내에서 서로 다른 변경 단위를 변경해도 충돌이 발생하지 않습니다. 자세한 내용은 변경 단위 동기화를 참조하십시오.
로그에 충돌 저장
동기화 세션과 별개로 처리할 수 있도록 충돌을 로그에 저장하면 유용합니다. 나중에 사용자가 충돌을 검토하고 해결 방법을 결정할 수 있습니다. 또는 충돌에서 두 항목의 데이터를 병합하여 제약 조건 충돌을 해결할 경우 변경 내용 적용자가 충돌 로그를 사용하여 동기화 세션 중에 임시 충돌을 저장할 수도 있습니다.
충돌 로그를 만들고 사용하는 방법에 대한 자세한 내용은 충돌 기록 및 관리를 참조하십시오.
참고 항목
참조
ISynchronousNotifyingChangeApplier 인터페이스
ISynchronousNotifyingChangeApplierTarget 인터페이스
NotifyingChangeApplier
INotifyingChangeApplierTarget