共用方式為


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。使用組件重新導向可以在 Managed 程式碼中達成介面相容性,但是這些介面在 Unmanaged 程式碼中並不相容。

  • 中繼資料相容性。例如,假設某個同步處理應用程式使用 Sync Framework 2.0 並且使用 Proxy 提供者連接到在不同處理序中執行的提供者。其中一個提供者使用 Sync Framework 2.0 但另一個則是使用 Sync Framework 1.0。如果所有元件都只使用與最低版本元件相容的功能,就可以使用序列化達成中繼資料相容性。

注意

針對 Sync Framework 1.0 撰寫的程式碼可以針對 Sync Framework 2.0 重新編譯,而不需要變更。但是,為確保中繼資料相容性,只要是中繼資料物件已進行序列化,就必須指定 SyncFrameworkVersion1 (適用於 Managed 程式碼) 或 SYNC_SERIALIZATION_VERSION_V1 (適用於 Unmanaged 程式碼) 的相容性層級。

介面相容性

當同步處理應用程式使用的 Sync Framework 版本與一個或兩個提供者使用的版本不同時,介面相容性就是一件很重要的事情。

當同步處理元件在相同的處理序內執行時,介面必須相容。下表列出當元件在相同的處理序內執行時,具有不同版本的元件要如何一起使用。

元件 Managed 程式碼 Unmanaged 程式碼

此應用程式會使用 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 組件版本

當應用程式及它所連接的提供者是以 Managed 程式碼撰寫時,可以使用組件重新導向來確保應用程式載入的所有組件都會使用特定的 Sync Framework 組件版本。當應用程式使用 Sync Framework 2.0 而且它所載入的其中一個提供者使用 Sync Framework 1.0 時,這樣的作法會很實用,因為 1.0 提供者的預設行為是使用 Sync Framework 1.0 組件。這樣會在載入提供者時,導致應用程式擲回 InvalidCastException

若要使用組件重新導向,請將應用程式組態 (AppName.exe.config) 檔包含在 Managed 應用程式專案中,該應用程式組態檔會指定使用 Sync Framework 1.0 組件的任何元件都將會重新導向,以便使用 Sync Framework 2.0 組件。下列範例顯示 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 列舉 (適用於 Managed 程式碼) 和 SYNC_SERIALIZATION_VERSION 列舉 (適用於 Unmanaged 程式碼),以指示同步處理元件內所包含的中繼資料版本。以下是一些常見的案例:

  • 應用程式會使用 Sync Framework 2.0 並且使用以 Sync Framework 2.0 建立的 Proxy 提供者連接到兩個提供者。其中一個遠端使用者是使用 Sync Framework 1.0,而另一個提供者則是使用 Sync Framework 2.0。兩個提供者都不使用 Sync Framework 變更套用者。只要 2.0 提供者不使用任何與 1.0 提供者不相容的功能,就可以執行同步處理。Proxy 提供者會使用序列化及 SyncFrameworkVersion1 (適用於 Managed 程式碼) 或 SYNC_SERIALIZATION_VERSION_V1 (適用於 Unmanaged 程式碼) 的相容性層級與 1.0 提供者交換中繼資料。請留意,在此情況下,如果任何一個提供者使用 Sync Framework 變更套用者,同步處理便會失敗。

  • 應用程式及兩個提供者都是使用 Sync Framework 2.0。其中一個提供者是針對配合 Windows 7 作業系統的同步處理元件運作設計而成,而另一個元件則是使用 Sync Framework 2.0 建置的。只要 2.0 提供者只使用與 Windows 7 作業系統同步處理元件相容的功能,就可以執行同步處理。在此情況下,中繼資料物件的相容性層級必須指定為 WindowsSync (適用於 Managed 程式碼) 或 SYNC_SERIALIZATION_VERSION_V2 (適用於 Unmanaged 程式碼)。如果 2.0 提供者使用了較新版本的功能 (例如自訂篩選),同步處理便會失敗。

Managed 程式碼:支援序列化版本的中繼資料類別為 ChangeBatchBaseSyncKnowledge,以及衍生自這些類別的類別,例如 ChangeBatchForgottenKnowledge。例如,提供者會將 SyncKnowledge 物件序列化成 1.0 格式,其方式是將 CompatibilityLevel 屬性設定為 SyncFrameworkVersion1 並且呼叫 Serialize。如果此物件包含了無法序列化為 1.0 格式的元素,當 CompatibilityLevel 屬性設定時就會擲回 InvalidKnowledgeVersionException

Unmanaged 程式碼:支援序列化版本的中繼資料介面為 ISyncKnowledgeISyncChangeBatchBase2,以及衍生或相關的介面,例如 IForgottenKnowledgeISyncChangeBatch。例如,提供者會將 ISyncKnowledge2 物件序列化成 1.0 格式,其方式是將 SYNC_SERIALIZATION_VERSION_V1 的序列化版本指定為 ISyncKnowledge2::SerializeWithOptions 方法。如果此物件包含了無法序列化為 1.0 格式的元素,就會傳回 SYNC_E_INVALID_SERIALIZATION_VERSION

請留意,Sync Framework 2.0 包含兩個相容性層級。即使兩個提供者都使用 Sync Framework 2.0,也請務必確定提供者所使用的中繼資料是相容的 (不論兩個元件是否在相同的處理序中使用或是使用序列化來相互溝通)。

下表列出可影響中繼資料格式的 Sync Framework 2.0 功能、這些功能的相容性層級,以及該功能所包含的某些類別或方法範例:

功能 相容性層級 類別或方法的範例

變更單位篩選

WindowsSync (適用於 Managed 程式碼) 或 SYNC_SERIALIZATION_VERSION_V2 (適用於 Unmanaged 程式碼)

ChangeUnitListFilterInfo (適用於 Managed 程式碼)、IChangeUnitListFilterInfo 介面 (適用於 Unmanaged 程式碼)

條件約束衝突

SyncFrameworkVersion2 (適用於 Managed 程式碼) 或 SYNC_SERIALIZATION_VERSION_V3 (適用於 Unmanaged 程式碼)

RecordConstraintConflictForItem (適用於 Managed 程式碼)、ISaveChangeContext2::SetConstraintConflictOnChange (適用於 Unmanaged 程式碼)。

自訂篩選

SyncFrameworkVersion2 (適用於 Managed 程式碼) 或 SYNC_SERIALIZATION_VERSION_V3 (適用於 Unmanaged 程式碼)

CustomFilterInfo (適用於 Managed 程式碼)、ICustomFilterInfo 介面 (適用於 Unmanaged 程式碼)

知識物件具有對應到所使用之知識功能的最低相容性層級。用來序列化知識物件的相容性層級不可低於最低相容性層級。知識物件通常會初始化為具有 SyncFrameworkVersion1 (適用於 Managed 程式碼) 或 SYNC_SERIALIZATION_VERSION_V1 (適用於 unmanaged 程式碼) 的最低相容性層級。如果使用了某項需要高於最低相容性層級的功能,則最低相容性層級也會隨之提高。例如,假設在某個知識物件加入標記來支援自訂篩選。此知識物件的最低相容性層級便會提高為 SyncFrameworkVersion2 (適用於 Managed 程式碼) 或 SYNC_SERIALIZATION_VERSION_V3 (適用於 Unmanaged 程式碼)。嘗試將此知識物件序列化為較低的層級將會失敗,而且嘗試搭配提供者使用知識物件也一樣會失敗,該提供者的設計用意是僅能搭配較低的相容性層級使用。

中繼資料儲存服務相容性

Sync Framework 會提供幾個機制,讓不同版本的元件能夠與使用中繼資料儲存服務儲存的中繼資料相互溝通。如需詳細資訊,請參閱從不同版本的元件存取中繼資料升級中繼資料存放區版本

請參閱

概念

安裝、轉散發和版本相容性