本主題列出當您使用 Sync Framework 時可能會發生的下列常見問題:
安裝 Sync Framework 2.0 不會升級之前安裝的版本
Managed 應用程式擲回 System.Runtime.InteropServices.COMException (0x80040154)
Managed 應用程式擲回 System.Runtime.InteropServices.COMException (0x80004002)
在 64 位元版 Windows 作業系統上偵錯時,堆疊資訊不正確
Sync Framework 重複呼叫 GetChangeBatch 造成無限迴圈
如需此處未列出之問題的詳細疑難排解說明,請參閱 Sync Framework 開發人員中心 (英文)。如需 Windows 事件追蹤 (ETW) 基礎結構之 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 並存安裝。
Managed 應用程式擲回 System.Runtime.InteropServices.COMException (0x80040154)
Managed 同步處理應用程式擲回 System.Runtime.InteropServices.COMException,並含下列錯誤訊息:「由於發生下列錯誤,為具有 CLSID {565AEDBF-3108-4405-AF1F-9C2C25925DAE} 的元件擷取 COM Class Factory 失敗: 80040154。」
這個例外狀況是在安裝中遺漏 Unmanaged 同步處理元件 (如 Synchronization.dll) 時發生。可能會發生於 Sync Framework 已解除安裝時,或安裝未順利完成時。
解決方案
請重新安裝 Sync Framework。Sync Framework 可以從這個 Microsoft 網站 (英文) 下載。
Managed 應用程式擲回 System.Runtime.InteropServices.COMException (0x80004002)
Managed 同步處理應用程式擲回 System.Runtime.InteropServices.COMException,並含下列錯誤訊息:「無法將型別 'Sync Framework Managed Class' 的 COM 物件轉換為事件介面型別 'Sync Framework COM Interop Class'。由於發生下列錯誤,介面 (IID 為 '{73EA794F-1251-4466-A19C-DAEAF5BDBD04}') 之 COM 元件上的 QueryInterface 呼叫失敗而導致作業失敗: 不支援此種介面 (發生例外狀況於 HRESULT: 0x80004002 (E_NOINTERFACE))。」
這種例外狀況發生於在一個單執行緒 Apartment 模式中建立 Sync Framework 物件,然後從另一個單執行緒 Apartment 模式呼叫該物件的方法。在此情況下,.NET Framework 會透過查詢 IMarshal 介面的 Sync Framework 物件,嘗試從一個 Apartment 模式封送處理 Sync Framework 物件到另一個 Apartment 模式;Sync Framework 物件不會實作 IMarshal,因此呼叫會由於這種例外狀況而失敗。
解決方案
使用多執行緒 Apartment 模式 (MTA) 執行緒。MTA 執行緒不需要封送處理。
在 64 位元版 Windows 作業系統上偵錯時,堆疊資訊不正確
在 64 位元版 Windows 作業系統上,堆疊資訊已遺失而不正確顯示於偵錯工具中。
這個問題發生於 Managed 元件擲回轉換為 Unmanaged 元件的例外狀況,然後此 Unmanaged 元件又擲回例外狀況給 Managed 元件。在此情況下,.NET Framework 不會在 64 位元版 Windows 作業系統上正確保存堆疊資訊。因為當特定 Managed 元件擲回例外狀況時,Sync Framework 的 Managed 元件會使用 .NET Framework 的 COM 互通性功能包裝 Unmanaged 元件,就會發生這種案例。
這個問題的明確範例是:產生 FeedSync 摘要的 Managed 同步處理應用程式。Managed 應用程式會實作擲回例外狀況的 FeedIdConverter 方法。例外狀況是擲回給 Sync Framework 的基礎 Unmanaged 元件,然後再擲回給 Managed 應用程式程式碼。此時,偵錯工具中的堆疊追蹤不會正確顯示例外狀況的源頭。
解決方案
由於無法在此情況下正確保存堆疊資訊,您必須使用其他偵錯策略,例如擲回自訂例外狀況,以便僅由例外狀況的類型就能判斷例外狀況的源頭。
Sync Framework 重複呼叫 GetChangeBatch 造成無限迴圈
在同步處理期間,Sync Framework 會重複呼叫 GetChangeBatch (適用於 Managed 程式碼) 或 IKnowledgeSyncProvider::GetChangeBatch (適用於 Unmanaged 程式碼) 直到從 IsLastBatch (適用於 Managed 程式碼) 或是 TRUE 從 ISyncChangeBatchBase::GetIsLastBatch (適用於 Unmanaged 程式碼) 接到傳回 true 的變更批次為止。
解決方案
提供者傳回最後變更批次之前,必須使用 SetLastBatch (適用於 Managed 程式碼) 或 ISyncChangeBatchBase::SetLastBatch (適用於 Unmanaged 程式碼) 讓批次變成最後批次。