用于更新虚拟目录内容的C#代码或库,而不会破坏客户端

时间:2015-02-27 16:56:12

标签: c# iis web

我有很多定期更新的静态内容,通过IIS通过IIS作为虚拟目录提供。我有一个C#应用程序来更新这个静态内容。静态内容表示匹配集。 此内容会定期更改,并在向客户提供之前进行验证。我目前正在使用this code进行目录复制,但这有点暴力。

内容包含带有版本信息的清单文件。我知道我可以最后更新清单文件,但我不想从已经下载较旧内容的客户端中删除地毯,并留下一组脏文件。

建议更换文件夹的方法是什么,以便现有客户端不会获得文件集的混合版本?这必须是常见的,但我找不到任何图书馆或最佳实践指导来做到这一点。 我看起来像rsync for Windows和其他备份/恢复样式工具,但它们看起来都有点矫枉过正,而且通常没有API。

1 个答案:

答案 0 :(得分:0)

我最终使用了Microsoft Sync Framework。它运作得相当好。还有一些错误。这是框架的good intro。 这是我实施的重要部分。

 public static bool DirectorySynchronisation(string sourceFiles, string targetFiles)
    {
        Trace.Info("Beginning Directory Sync");
        try
        {
            Trace.Info("... between source location: {0} and targeted location: {1}", sourceFiles, targetFiles);

            //Exclude metadata from sync.
            var fileSyncScopeFilter = new FileSyncScopeFilter();
            fileSyncScopeFilter.FileNameExcludes.Add("metadata.abc");

            // Create file system provider
            var source = new FileSyncProvider(Guid.NewGuid(), sourceFiles, fileSyncScopeFilter, FileSyncOptions.None);
            var target = new FileSyncProvider(Guid.NewGuid(), targetFiles);

            // Ask providers to detect changes
            source.DetectChanges();
            target.DetectChanges();

            // Sync changes
            SyncOrchestrator agent = new SyncOrchestrator
            {
                LocalProvider = source,
                RemoteProvider = target,
                Direction = SyncDirectionOrder.Upload //One way only

            };
            agent.Synchronize();
            Trace.Info("Completed Directory Sync");

            return true;
        }
        catch (Exception exception)
        {
            Trace.Info("Exception thrown while syncing files");
            Trace.Exception(exception);
            return false;
        }
    }

希望这有助于某人。