C# 如何解决;“存储引擎操作失败”;使用Microsoft.Sync?
我开发了一个同步软件,可以使用Microsoft sync Framework 2.1同步数据库和目录 一段时间后,使用应用程序的客户端出现以下错误: 存储引擎操作失败,错误代码为25104(HRESULT=0x80004005,源IID={0C733A63-2A1C-11CE-ADE5-00AA0044773D},参数=(4001,0,0,,) 我试图在代码中跟踪错误,但没有成功 SyncOchestrator开始同步时出错。从stacktrace我得到: 在Microsoft.Synchronization.Files.FileSyncProvider…ctor()上 以下是我的一些代码: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
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);
}
你能帮我做这个吗?我越来越沮丧,我不知道该去哪里找!该代码在一年内运行良好
有关更多信息:
- 最终用户拥有文件夹所需的所有访问权限
- 文件服务器有足够的可用空间进行写入
非常感谢您的建议。我终于想出了解决办法。碰巧元数据文件太大/已损坏。因此,为了解决我的问题,我对同步进行了分段,并逐个选择了所有子文件夹,而不是只选择一个包含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);
}
这就是我问题的解决办法。我希望这能帮助你们
谢谢