C# 如何解决;“存储引擎操作失败”;使用Microsoft.Sync?

C# 如何解决;“存储引擎操作失败”;使用Microsoft.Sync?,c#,desktop-application,microsoft-sync-framework,sql-server-2014-express,C#,Desktop Application,Microsoft Sync Framework,Sql Server 2014 Express,我开发了一个同步软件,可以使用Microsoft sync Framework 2.1同步数据库和目录 一段时间后,使用应用程序的客户端出现以下错误: 存储引擎操作失败,错误代码为25104(HRESULT=0x80004005,源IID={0C733A63-2A1C-11CE-ADE5-00AA0044773D},参数=(4001,0,0,,) 我试图在代码中跟踪错误,但没有成功 SyncOchestrator开始同步时出错。从stacktrace我得到: 在Microsoft.Synchro

我开发了一个同步软件,可以使用Microsoft sync Framework 2.1同步数据库和目录

一段时间后,使用应用程序的客户端出现以下错误:

存储引擎操作失败,错误代码为25104(HRESULT=0x80004005,源IID={0C733A63-2A1C-11CE-ADE5-00AA0044773D},参数=(4001,0,0,,)

我试图在代码中跟踪错误,但没有成功

SyncOchestrator开始同步时出错。从stacktrace我得到:

在Microsoft.Synchronization.Files.FileSyncProvider…ctor()上

以下是我的一些代码:

 try
        {
            // Set options for the sync operation
            FileSyncOptions options = FileSyncOptions.ExplicitDetectChanges |
                     FileSyncOptions.RecycleDeletedFiles | FileSyncOptions.RecyclePreviousFileOnUpdates | FileSyncOptions.RecycleConflictLoserFiles;

            FileSyncScopeFilter filter = new FileSyncScopeFilter();
            filter.FileNameExcludes.Add("*.lnk"); // Exclude all *.lnk files
            filter.FileNameExcludes.Add("*.mdf"); // Exclude all *.mdf files
            filter.FileNameExcludes.Add("*.ldf"); // Exclude all *.ldf files
            filter.FileNameExcludes.Add("*.MDF"); // Exclude all *.MDF files
            filter.FileNameExcludes.Add("*.LDF"); // Exclude all *.LDF files
            filter.FileNameExcludes.Add("*.tdms_index"); // Exclude all *.tdms_index files

            Thread.Sleep(50);
            // Synchronization of 2 Folders
            FileSyncProvider providerA = new FileSyncProvider(Guid.NewGuid(), replica1RootPath, filter, options);
            FileSyncProvider providerB = new FileSyncProvider(Guid.NewGuid(), replica2RootPath, filter, options);
            providerA.DetectChanges();
            providerB.DetectChanges();

            Thread.Sleep(50);
            SyncOrchestrator agent = new SyncOrchestrator();
            agent.LocalProvider = providerA;
            agent.RemoteProvider = providerB;
            agent.Direction = SyncDirectionOrder.Upload;
            MessageBox.Show("Let's SYNC");
            agent.Synchronize(); // The error happens here

            Thread.Sleep(50);
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
            MessageBox.Show(e.StackTrace);
        }
你能帮我做这个吗?我越来越沮丧,我不知道该去哪里找!该代码在一年内运行良好

有关更多信息:

  • 最终用户拥有文件夹所需的所有访问权限
  • 文件服务器有足够的可用空间进行写入
我在C#,微软.Synchronization 2.1,.NET4,VisualStudio2015上


非常感谢您的建议。

我终于想出了解决办法。碰巧元数据文件太大/已损坏。因此,为了解决我的问题,我对同步进行了分段,并逐个选择了所有子文件夹,而不是只选择一个包含260个文件的文件夹

foreach (string dep in Directory.GetDirectories(plantFolder1)) // different departements
                            {
                                string depFolder1 = plantFolder1 + dep.Remove(0, plantFolder1.Length);
                                string depFolder2 = depFolder1.Replace(subReplica1, subReplica2); ;

                                Thread.Sleep(50);
                                // Synchronization of 2 Folders
                                FileSyncProvider providerA = new FileSyncProvider(Guid.NewGuid(), depFolder1, filter, options);

                                bool exists = Directory.Exists(depFolder2);
                                if (!exists)
                                    Directory.CreateDirectory(depFolder2);

                                FileSyncProvider providerB = new FileSyncProvider(Guid.NewGuid(), depFolder2, filter, options);
                                providerA.DetectChanges();
                                providerB.DetectChanges();

                                Thread.Sleep(50);
                                SyncOrchestrator agent = new SyncOrchestrator();
                                agent.LocalProvider = providerA;
                                agent.RemoteProvider = providerB;
                                agent.Direction = SyncDirectionOrder.Upload;
                                agent.Synchronize();
                                Thread.Sleep(50);
                            }
这就是我问题的解决办法。我希望这能帮助你们

谢谢