0

私は、Microsoft Sync Framework 2.1を使用してデータベースとディレクトリを同期する同期ソフトウェアを開発しました。しばらくしてアプリケーションを使用してクライアントがこのエラーを取得Microsoft.Syncで「ストレージエンジンの操作が失敗しました」を解決する方法

ストレージエンジンの運転は、エラーコード25104(HRESULT = 0x80004005の、ソースIID = {0C733A63-2A1C-11CE-ADE5-00AA0044773D}で失敗しました、パラメータ=(4001,0,0、、、、))。

私のコード内でエラーを追跡しようとしましたが、成功しませんでした。

エラーは、SyncOchestratorが同期を開始するときに発生します。そして、私が得たスタックトレースから:ここでは)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); 
     } 

あなたがしてくださいすることができますこれで私を助けてください?私は欲求不満になり、どこを見なければならないのか分かりません!コードは完全に1年間働いた。詳細については

  • エンドユーザーがフォルダに必要なすべてのアクセス権を持っています。
  • ファイルサーバーには十分な空き領域があります。私はC#の上だ

、Microsoft.Synchronization 2.1、ネット4、Visual Studioの2015年

は、任意の提案のためにありがとうございました。

答えて

0

私は最終的に解決策を考え出しました。メタデータファイルが大きすぎる/壊れていたことが起こりました。だから私の問題を解決するために、私は同期を断片化し、260 Go of Filesで1つのフォルダを選択するのではなく、すべてのサブフォルダを1つずつ選択しました。

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

これは私の問題の解決策です。私はこれがあなたを助けることを願っています。

ありがとうございました。

関連する問題