在这篇文章中,将展示如何在自己的项目中使用P2P同步框架。如果不想使用NuGet,应该跳到下一节:“手动添加程序集引用”。
假设已经熟悉NuGet,如果不是,可以在这里了解更多。
搜索并安装P2PSync包(在搜索框中输入P2P):
安装包后,应该在项目中看到基础设施程序集。依赖项(NLog)以及app.config文件包含新的部分。
这些程序集用于支持日志记录,使用Log2Console。可以从Codeplex下载。
如果不想使用NuGet,应该从Codeplex项目站点下载最新版本。
解压文件后,将以下程序集添加到项目中:
从NLog下载并添加以下程序集:
实现自己的业务逻辑同步类 - 继承自Roniz.WCF.P2P.Sync.Interfaces.ISynchronizationBusinessLogic(在示例应用程序中,这是Roniz.WCF.P2P.ApplicationTester.MySynchronizationBusinessLogic类)。应该覆盖以下方法:
还有一个名为IsNeedFullSynchronization的属性,由基础设施自动设置,以确定启动同步过程的节点是否需要完整或部分同步。但是,开发人员可以设置此属性。例如,如果他认为在某些条件下,他需要完全同步。
启动同步管理器:
SyncManager = new SynchronizationStateManager(MySynchronizationBusinessLogic);
当想要开始同步时:
SyncManager.Open();
根据应用程序特定逻辑,可选地调用SyncManager上的更新:
var updateState = new MyStateContainer
{
StateDictionary = new Dictionary(1)
};
updateState.StateDictionary.Add(id, UserState);
SyncManager.Update(updateState);
关闭同步管理器:这行代码将向其他节点发送通知,当前节点正在关闭 - 他们可以在他们的业务逻辑层中对此消息做出反应。
SyncManager.Close();
如果使用NuGet安装包,app.config文件已经合并,并且包含以下部分。如果没有通过NuGet安装,应该自己手动添加这些部分。
<system.serviceModel>
<bindings>
<netPeerTcpBinding>
<binding name="NetPeerTcpBindingUnsecure">
<security mode="None"/>
</binding>
</netPeerTcpBinding>
</bindings>
<client>
<endpoint address="net.p2p://Roniz.WCF.P2P.Sync.DefaultMeshAddress" binding="netPeerTcpBinding" bindingConfiguration="NetPeerTcpBindingUnsecure" contract="Roniz.WCF.P2P.Sync.Interfaces.ISynchronizedState" name="SyncDefaultEndpointConfigurationName" kind="" endpointConfiguration="" />
</client>
</system.serviceModel>