2013-01-25 104 views
14

我一直在玩「微軟同步框架2.1」同步兩個本地SQL Server 2008數據庫與一個asp.net項目。微軟同步框架COM類錯誤

我的代碼:

SqlConnection clientConn = new SqlConnection(@"Server=XXXXXX;User ID=sa; Password=xxxx;Database=ZzzClient"); 

SqlConnection serverConn = new SqlConnection("Server=XXXXXX;User ID=sa; Password=xxxx;Database=ZzzServer"); 

SyncOrchestrator syncOrchestrator = new SyncOrchestrator(); 

syncOrchestrator.LocalProvider = new SqlSyncProvider("InventoryScope", clientConn); 
syncOrchestrator.RemoteProvider = new SqlSyncProvider("InventoryScope", serverConn); 

syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload; 

SyncOperationStatistics syncStats = syncOrchestrator.Synchronize(); 

,但我得到以下錯誤,當同步()被執行通話;

Retrieving the COM class factory for component with CLSID {EC413D66-6221-4EBB-AC55-4900FB321011} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

發展envoriement VS 2012,C#asp.net項目,框架4.5 操作系統:Windows 7家庭炳廷。 (x64)

安裝了SyncSDK-v2.1-x64-ENU。

Microsoft.Synchronization

Microsoft.Synchronization.Data

Microsoft.Synchronization.Data.SqlServer

加入

引用從「C項目:\ Program Files文件\ Microsoft同步框架\ 2.1 \運行」。

兩個由SqlSyncScopeProvisioning設置的數據庫。

我已經試過項目平臺目標兩個不同的x64 ANS 86

任何想法,將不勝感激....

Provisioned databases

我已經改變了從「C的所有引用: \ Program Files \ Microsoft Files \ Microsoft Sync Framework \ 2.1 \ Runtime「\ Program Files \ x86 \ Microsoft SDK \ Microsoft Sync Framework」

new references

和平臺目標設置爲64 Platform Target

「使用本地IIS Web服務器」 選擇 Local IIS

UPDATE: 我想同樣的過程與控制檯應用程序,它正常工作並同步所有數據。

我在控制檯應用程序中添加了以下四個引用:

「C:\ Program Files文件\ Microsoft同步框架\ 2.1 \運行\ 64 \ Microsoft.Synchronization.dll」

C:\ Program Files文件\ Microsoft同步框架\ 2.1 \運行\ ADO.NET \ V3 .1 \ x64 \ Microsoft.Synchronization.Data.dll「

」c:\ Program Files \ Microsoft Sync Framework \ 2.1 \ Runtime \ ADO.NET \ V3.1 \ x64 \ Microsoft.Synchronization.Data.Server。 dll「

」c:\ Program Files \ Microsoft Sync Framework \ 2.1 \ Runtime \ ADO.NET \ V3「。1 \ 64 \ Microsoft.Synchronization.Data.SqlServer.dll」

和設置應用程序的調試屬性如下 console application's properties

相同的標號,相同的生成屬性(目標64)和相同的代碼無法正常工作在Asp.Net項目

Could not load file or assembly 'WebApplication2' or one of its dependencies. An attempt was made to load a program with an incorrect format.

我猜,Web應用程序無法加載正確的組件和嘗試加載86版本

+0

不應該參考組件在Program Files文件,而不是程序文件(x86)?你在IIS或VS Web服務器上運行它嗎? – JuneT

+0

我試了兩種。如果我通過VS添加引用添加這些引用,它來自Program Files(x86)\ Microsoft SDKs \ Microsoft Sync Framework \ 2.1 \ Runtime。我手動刪除了「Program Files(x86)」,並從C:\ Program Files \ Microsoft Sync Framework \ 2.1 \ Runtime \ x64瀏覽器中添加了一個。相同的結果.... –

+0

VS 2012顯示並添加「Microsoft.Synchronization」程序集「程序文件(x86)」,而不是如果我手動添加程序集「C:\ Program Files \ Microsoft Sync Framework \ 2.1 \ Runtime \ x64「,我得到」無法加載文件或程序集'DataAccess'或它的一個依賴項,試圖加載一個格式不正確的程序。「錯誤。 –

回答

11

我討厭回答我的問題:

If you start an asp.net project which has x64 Sync Framework assemblies but you are NOT running Visual Studio under the administrator account, VS can not load Snyc Framework assemblies. At least, that's my problem..

如果您不是管理員VS無法正確管理「本地IIS Web服務器」。

此外,如果我沒有錯,即使您的操作系統是x64,「IIS Express」也無法加載x64 Sync Framework程序集。

Do not bother to use "IIS express" just use "Local IIS Web Server" with administrator rights on VS and set platform target x64 for your project.

enter image description here

4

我用的是64位的同步框架DLL和必須從建設任何CPU在項目屬性改變我的C#應用​​程序性能打造頁面。
但是,然後GUI設計者不再顯示對話框。

另一種方法是使用32位同步框架並在項目的構建設置中設置首選32位

0

平臺如果你不想改變你的目標平臺,並希望保持它的「任何」。爲您的應用程序使用新的應用程序池,進入高級設置並將「啓用32位應用程序」更改爲True。它爲我工作,它可能適合你。

enter image description here