Microsoft Sync Framework COM类错误

时间:2013-01-25 10:11:21

标签: c# .net microsoft-sync-framework

我一直在使用“Microsoft Sync Framework 2.1”来将两个本地sql server 2008数据库与asp.net项目同步。

我的代码:

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();

但是当执行 Synchronize()调用时出现以下错误;

  

使用CLSID检索组件的COM类工厂   {EC413D66-6221-4EBB-AC55-4900FB321011}由于以下原因而失败   错误:80040154未注册类(HRESULT异常:   0x80040154(REGDB_E_CLASSNOTREG))。

开发envoriement VS 2012,C#asp.net项目,框架4.5 操作系统:Windows 7 Home Prem。 (64)

已安装SyncSDK-v2.1-x64-ENU。

Microsoft.Synchronization

Microsoft.Synchronization.Data

Microsoft.Synchronization.Data.SqlServer

引用已从“C:\ Program Files \ Microsoft Sync Framework \ 2.1 \ Runtime”添加到项目中。

由SqlSyncScopeProvisioning配置的两个数据库。

我已经尝试了Project Platform Target x64 ans x86

任何想法都会受到高度赞赏....

Provisioned databases

我已将“C:\ Program Files(x86)\ Microsoft SDKs \ Microsoft Sync Framework”中的所有引用更改为“C:\ Program Files \ Microsoft Sync Framework \ 2.1 \ Runtime”

new references

并将平台目标设置为x64 Platform Target

选择“使用本地IIS Web服务器” Local IIS

更新 我使用控制台应用程序尝试了相同的过程,它可以正常工作并同步所有数据。

我添加了以下四个对控制台应用程序的引用;

“c:\ Program Files \ Microsoft Sync Framework \ 2.1 \ Runtime \ x64 \ Microsoft.Synchronization.dll”

c:\ Program Files \ Microsoft Sync Framework \ 2.1 \ Runtime \ 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 \ x64 \ Microsoft.Synchronization.Data.SqlServer.dll”

并将应用程序的调试属性设置如下 console application's properties

相同的引用,相同的构建属性(目标到x64)和相同的代码在Asp.Net项目中不起作用。

  

无法加载文件或程序集“WebApplication2”或其中一个   依赖。尝试加载程序不正确   格式。

我猜,Web应用程序无法加载正确的程序集并尝试加载x86版本

4 个答案:

答案 0 :(得分:12)

我讨厌回答我自己的问题:

  

如果你启动了一个拥有x64 Sync Framework的asp.net项目   程序集,但你运行Visual Studio下的   管理员帐户,VS无法加载Snyc Framework程序集。在   至少,这是我的问题......

如果您不是管理员,则无法正常管理“本地IIS Web服务器”。

此外,如果我没错,即使您的操作系统是x64,“IIS Express”也无法加载x64 Sync Framework程序集。

  

不要费心使用“IIS express”只使用“本地IIS Web服务器”   拥有VS的管理员权限并为您的项目设置平台目标x64。

enter image description here

答案 1 :(得分:4)

我使用64位Sync Framework DLL,并且必须在项目属性构建页面中将我的C#app属性从构建 Any CPU 更改为 x64 。 但是GUI设计师不再显示对话框了。

另一种方法是使用32位Sync Framework并在项目的构建设置中设置 Prefer 32bit

答案 2 :(得分:2)

如果它发生在与您的开发计算机不同的计算机上,请确保已安装Microsoft Sync Framework - Redistributable Package。 https://www.microsoft.com/en-us/download/details.aspx?id=19502

在下载选项中选择正确的平台(x86-x64)

答案 3 :(得分:0)

如果您不想更改目标平台并希望将其保留为“任意”。为您的应用程序使用新的应用程序池,转到提前设置并将启用32位应用程序更改为True。它对我有用,它可能适合你。

enter image description here