かるあ のメモ

アクセスカウンタ

zoom RSS Microsoft Sync Framework のちょっとした解説

<<   作成日時 : 2007/11/09 23:32   >>

ナイス ブログ気持玉 1 / トラックバック 0 / コメント 0

このごろ はてなダイアリーの方にも同じようなエントリを書いてます。
で、向こうではちょっと先にサンプルを乗せたんだけれど、Microsoft Sync Framework をちょこっと触ったので少し紹介してみようと思います。

参考にしたサンプルはMSDNにあるIntroducing Microsoft Sync Framework: Sync Services for File Systems まぁこれにコメント入れながら自分なりにコードを書き換えて試してみました。
Sync Framework はインストールするとこんな感じのディレクトリ構成になって、for Text 版も for ADO.NET 版もサンプルがくっついてくるので参考にしてみるといいと思います。
画像


で今回作ったサンプルではレプリカディレクトリ1(C:\temp\Replica1)とレプリカディレクトリ2(C:\temp\Replica2)を同期します。
コード自体は向こうを見てもらうとして動きの解説を。(だって長いし。。。)
まずレプリカディレクトリ1の内容はこれで、
画像

ディレクトリ2はこれ(空ですね)
画像

で、さっきのサンプルを実行するとこうなる。
ディレクトリ1
画像

ディレクトリ2
画像

ディレクトリ1と2の内容が同期されているのがわかると思います。
そのほかにも最初はなかったファイルが2つ新しくできています。
SyncFile.ID は同期先を一意に表すファイルでサンプル中の GetReplicaId メソッドで作成しています。
Dim newSyncId = New SyncId(Guid.NewGuid())
sw.WriteLine(newSyncId.GetGuidId().ToString("D"))

もうひとつの filesync.metadata は、サンプル中の RegisterReplicateFolderメソッドで作成されます。
実際には FileSyncProvider.DetectChanges() を実行したときに作成されるファイルで、そのディレクトリのファイル情報を格納するメタファイルになります。

そして CreateSnapshot ではファイルコピー成功時の動作と失敗時のイベントハンドらを定義後
AddHandler destinationProvider.AppliedChange, AddressOf OnAppliedChange
AddHandler destinationProvider.SkippedChange, AddressOf OnSkippedChange

同期元、同期先の SyncId を元に同期プロバイダを使用して2つのデイレクトリを同期します。
Dim agent = New SyncAgent()
agent.LocalProvider = sourceProvider
agent.RemoteProvider = destinationProvider
agent.Direction = SyncDirection.Upload
agent.Synchronize()


USBのファイルを同期させたり、サーバのファイルを同期させてオフラインのときに使うといったことが簡単にできそうですね。
ファイルのコピーが失敗したときなども、イベント内のステータスで分岐することで細かく記述するし使いどころを考えると結構面白いかもしれない。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
ナイス

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Microsoft Sync Framework のちょっとした解説 かるあ のメモ/BIGLOBEウェブリブログ
文字サイズ:       閉じる