Sync Framework 이전 버전과의 호환성 및 상호 운용성
최신 버전의 Sync Framework가 릴리스되더라도 특정 버전의 Sync Framework용으로 작성된 응용 프로그램 및 공급자를 계속 사용할 수 있도록 컴퓨터에 여러 버전의 Sync Framework를 함께 설치할 수 있습니다. 그러나 동기화 응용 프로그램 또는 공급자가 사용하는 Sync Framework 버전이 다른 구성 요소와 독립적으로 변경될 수 있으므로 동기화 커뮤니티의 복제본이 서로 동기화된 상태를 계속 유지하도록 주의를 기울여야 합니다. 예를 들어 동기화 응용 프로그램이 Sync Framework 2.0을 사용하도록 업그레이드되었지만 공급자 중 하나가 계속 Sync Framework 1.0을 사용할 수 있습니다.
호환성에 대해서는 다음과 같은 두 가지 기본 영역을 고려해야 합니다.
인터페이스 호환성. 예를 들어 동기화 응용 프로그램이 Sync Framework 2.0을 사용하고 같은 프로세스의 공급자에게 연결됩니다. 공급자 중 하나가 Sync Framework 1.0을 사용합니다. 어셈블리 리디렉션을 사용하여 관리 코드에서 인터페이스 호환성을 유지할 수 있습니다. 비관리 코드에서는 인터페이스가 호환되지 않습니다.
메타데이터 호환성. 예를 들어 동기화 응용 프로그램이 Sync Framework 2.0을 사용하고 프록시 공급자를 사용하여 별도 프로세스에서 실행하는 공급자에 연결됩니다. 한 공급자는 Sync Framework 2.0을, 다른 공급자는 Sync Framework 1.0을 사용합니다. 모든 구성 요소가 버전이 가장 낮은 구성 요소와 호환되는 기능만 사용하는 경우 직렬화를 사용하여 메타데이터 호환성을 유지할 수 있습니다.
참고
Sync Framework 1.0에 대해 작성된 코드는 변경하지 않고 Sync Framework 2.0에 대해 다시 컴파일할 수 있습니다. 그러나 메타데이터 호환성을 유지하려면 메타데이터 개체를 직렬화할 때마다 SyncFrameworkVersion1(관리 코드의 경우) 또는 SYNC_SERIALIZATION_VERSION_V1(비관리 코드의 경우)의 호환성 수준을 지정해야 합니다.
인터페이스 호환성
동기화 응용 프로그램에서 사용하는 Sync Framework 버전이 하나 이상의 공급자에서 사용하는 버전과 다를 경우 인터페이스 호환성이 중요합니다.
동기화 구성 요소를 같은 프로세스에서 실행할 때 인터페이스가 호환되어야 합니다. 다음 표에서는 같은 프로세스에서 구성 요소를 실행할 경우 다른 버전의 구성 요소를 함께 사용할 수 있는 방법을 보여 줍니다.
구성 요소 | 관리 코드 | 비관리 코드 |
---|---|---|
응용 프로그램은 Sync Framework 1.0을 사용하고 한 공급자는 Sync Framework 1.0을, 다른 공급자는 Sync Framework 2.0을 사용합니다. |
어셈블리 리디렉션이 사용되지 않는 경우 응용 프로그램에서 Sync Framework 1.0을 사용하고 2.0 공급자가 사용되면 InvalidCastException이 발생합니다. 어셈블리 리디렉션이 사용되는 경우 모든 구성 요소에서 Sync Framework 2.0이 사용됩니다. Sync Framework 구성 요소는 이전 버전과 호환되므로 동기화가 올바로 작동됩니다. |
응용 프로그램에서 Sync Framework 1.0이 사용되고 공급자가 사용되면 E_NOINTERFACE가 반환됩니다. |
응용 프로그램은 Sync Framework 2.0을 사용하고 한 공급자는 Sync Framework 1.0을, 다른 공급자는 Sync Framework 2.0을 사용합니다. |
응용 프로그램에서 Sync Framework 2.0이 사용되고 어셈블리 리디렉션을 사용하여 1.0 공급자에 대해 버전 2.0 개체를 인스턴스화합니다. Sync Framework 구성 요소는 이전 버전과 호환되므로 동기화가 올바로 작동됩니다. |
응용 프로그램에서 Sync Framework 2.0이 사용되고 공급자가 사용되면 E_NOINTERFACE가 반환됩니다. |
공급자에서 사용되는 Sync Framework 어셈블리 버전 리디렉션
연결되는 응용 프로그램 및 공급자가 관리 코드로 작성되었으면 어셈블리 리디렉션을 사용하여 특정 버전의 Sync Framework 어셈블리가 응용 프로그램에서 로드하는 모든 구성 요소에서 사용되도록 할 수 있습니다. 기본 동작이 1.0 공급자가 Sync Framework 1.0 어셈블리를 사용하는 것이므로 응용 프로그램이 Sync Framework 2.0을 사용하고 여기에서 로드되는 공급자 중 하나가 Sync Framework 1.0을 사용할 경우 이 방식이 유용합니다. 이렇게 하면 공급자가 로드될 때 응용 프로그램에서 InvalidCastException이 발생합니다.
어셈블리 리디렉션을 사용하려면 Sync Framework 1.0 어셈블리를 사용하는 모든 구성 요소를 리디렉션하여 Sync Framework 2.0 어셈블리를 사용하도록 지정하는 응용 프로그램 구성 파일(AppName.exe.config)을 관리되는 응용 프로그램 프로젝트에 포함합니다. 다음 예제에서는 AppName.exe.config 파일의 형식을 보여 줍니다.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Synchronization"
publicKeyToken="89845dcd8080cc91"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0-1.9.9.9"
newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
메타데이터 호환성
다른 버전의 동기화 구성 요소는 공유하고 있는 메타데이터의 호환성 수준이 같을 경우 서로 메타데이터를 교환할 수 있습니다. Sync Framework에서는 CompatibilityLevel 열거형(관리 코드의 경우) 및 SYNC_SERIALIZATION_VERSION 열거형(비관리 코드의 경우)을 정의하여 동기화 구성 요소에 포함된 메타데이터의 버전을 나타냅니다. 몇 가지 일반적인 시나리오는 다음과 같습니다.
응용 프로그램이 Sync Framework 2.0을 사용하고 Sync Framework 2.0을 사용하여 작성된 프록시 공급자를 사용하여 두 공급자에게 연결됩니다. 한 원격 공급자는 Sync Framework 1.0을, 다른 공급자는 Sync Framework 2.0을 사용합니다. 두 공급자 모두 Sync Framework 변경 내용 적용자를 사용하지 않습니다. 2.0 공급자가 1.0 공급자와 호환되지 않는 기능을 사용하지 않을 경우 동기화를 수행할 수 있습니다. 프록시 공급자가 직렬화 및 SyncFrameworkVersion1(관리 코드의 경우) 또는 SYNC_SERIALIZATION_VERSION_V1(비관리 코드의 경우)의 호환성 수준을 사용하여 1.0 공급자와 메타데이터를 교환합니다. 이러한 경우 두 공급자 중 하나가 Sync Framework 변경 내용 적용자를 사용하면 동기화가 실패하므로 주의하십시오.
응용 프로그램과 두 공급자가 Sync Framework 2.0을 사용합니다. 한 공급자가 Windows 7 운영 체제의 동기화 구성 요소와 작동하도록 디자인되었고 다른 공급자는 Sync Framework 2.0을 사용하여 작성되었습니다. 2.0 공급자가 Windows 7 운영 체제 동기화 구성 요소와 호환되는 기능만 사용할 경우 동기화를 수행할 수 있습니다. 이러한 경우 메타데이터의 호환성 수준은 WindowsSync(관리 코드의 경우) 또는 SYNC_SERIALIZATION_VERSION_V2(비관리 코드의 경우)로 지정되어야 합니다. 2.0 공급자가 사용자 지정 필터와 같은 최신 버전의 기능을 사용하면 동기화가 실패합니다.
관리 코드 직렬화 버전을 지원하는 메타데이터 클래스는 ChangeBatchBase, SyncKnowledge 그리고 이러한 클래스로부터 파생된 클래스(예: ChangeBatch, ForgottenKnowledge)입니다. 예를 들어 공급자는 CompatibilityLevel 속성을 SyncFrameworkVersion1로 설정하고 Serialize를 호출하여 SyncKnowledge 개체를 1.0 형식으로 직렬화합니다. 개체에 1.0 형식으로 직렬화할 수 없는 요소가 들어 있으면 CompatibilityLevel 속성을 설정할 때 InvalidKnowledgeVersionException이 발생됩니다.
비관리 코드 직렬화 버전을 지원하는 메타데이터 인터페이스는 ISyncKnowledge, ISyncChangeBatchBase2 그리고 IForgottenKnowledge 및 ISyncChangeBatch와 같은 파생 또는 관련 인터페이스입니다. 예를 들어 공급자가 SYNC_SERIALIZATION_VERSION_V1의 직렬화 버전을 ISyncKnowledge2::SerializeWithOptions 메서드로 지정하여 ISyncKnowledge2 개체를 1.0 형식으로 직렬화합니다. 개체에 1.0 형식으로 직렬화할 수 없는 요소가 들어 있으면 SYNC_E_INVALID_SERIALIZATION_VERSION이 반환됩니다.
Sync Framework 2.0에는 두 가지 호환성 수준이 포함되어 있으므로 주의하십시오. 두 공급자가 Sync Framework 2.0을 사용할 경우에도 사용되는 메타데이터가 서로 호환되는지, 구성 요소가 모두 같은 프로세스에서 사용되는지 또는 직렬화를 사용하여 상호 운용되는지 확인해야 합니다.
다음 표에서는 메타데이터 형식에 영향을 주는 Sync Framework 2.0 기능, 해당 호환성 수준 및 이러한 기능에 포함된 클래스 또는 메서드의 예제 몇 가지를 보여 줍니다.
기능 | 호환성 수준 | 예제 클래스 또는 메서드 |
---|---|---|
변경 단위 필터 |
WindowsSync(관리 코드의 경우) 또는 SYNC_SERIALIZATION_VERSION_V2(비관리 코드의 경우) |
ChangeUnitListFilterInfo(관리 코드의 경우), IChangeUnitListFilterInfo 인터페이스(비관리 코드의 경우) |
제약 조건 충돌 |
SyncFrameworkVersion2(관리 코드의 경우) 또는 SYNC_SERIALIZATION_VERSION_V3(비관리 코드의 경우) |
RecordConstraintConflictForItem(관리 코드의 경우), ISaveChangeContext2::SetConstraintConflictOnChange(비관리 코드의 경우) |
사용자 지정 필터 |
SyncFrameworkVersion2(관리 코드의 경우) 또는 SYNC_SERIALIZATION_VERSION_V3(비관리 코드의 경우) |
CustomFilterInfo(관리 코드의 경우), ICustomFilterInfo 인터페이스(비관리 코드의 경우) |
정보 개체에는 사용되는 정보 기능에 해당되는 최소 호환성 수준이 있습니다. 정보 개체를 직렬화하는 데 사용되는 호환성 수준은 최소 호환성 수준보다 낮을 수 없습니다. 정보 개체는 일반적으로 SyncFrameworkVersion1(관리 코드의 경우) 또는 SYNC_SERIALIZATION_VERSION_V1(비관리 코드의 경우)의 최소 호환성 수준으로 초기화됩니다. 더 높은 최소 호환성 수준을 필요로 하는 기능을 사용하면 최소 호환성 수준이 높아집니다. 예를 들어 사용자 지정 필터링을 지원하기 위해 정보 개체에 표식이 추가됩니다. 해당 정보 개체의 최소 호환성 수준이 SyncFrameworkVersion2(관리 코드의 경우) 또는 SYNC_SERIALIZATION_VERSION_V3(비관리 코드의 경우)로 높아집니다. 낮은 수준으로 정보 개체를 직렬화하려는 경우에는 낮은 호환성 수준에서만 작동하도록 디자인된 공급자를 가진 정보 개체를 사용하려고 시도하므로 직렬화가 실패합니다.
Metadata Storage Service 호환성
Sync Framework에서는 서로 다른 버전의 구성 요소가 Metadata Storage Service를 사용하여 저장된 메타데이터와 상호 운용할 수 있는 몇 가지 메커니즘을 제공합니다. 자세한 내용은 버전이 다른 구성 요소의 메타데이터 액세스 및 메타데이터 저장소 버전 업그레이드를 참조하십시오.