我的编程空间,编程开发者的网络收藏夹
学习永远不晚

服务端对WCF数据实例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

服务端对WCF数据实例分析

本篇内容介绍了“服务端对WCF数据实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

publicclassMySyncProvider:KnowledgeSyncProvider,IChangeDataRetriever,INotifyingChangeApplierTarget  

  1. {  

  2. //Thenameofthemetadatastorecustomcolumnthatisusedtosaveatimestampoflastchangeonan  

  3. //iteminthemetadatastoresowecandochangedetection.  

  4. conststringTIMESTAMP_COLUMNNAME="timestamp";  

  5. //Thisisoursampleinmemorydatastorewhichforsimplicty,storessetsofstringname-ProcessChangeBatchpairs  

  6. //referencedbyidentifiersofthetype'Guid'  

  7. MySimpleDataStore_store;  

  8. //UsetheSyncFramework'soptionalmetadatastoretotrackversioninformation  

  9. SqlMetadataStore_metadataStore=null;//表示通过使用轻型数据库存储元数据来实现的元数据存储区。  

  10. ReplicaMetadata_metadata=null;//提供对元数据存储区中的副本元数据和项元数据的访问。ReplicaMetadata还对删除检测和用于实现同步提供程序方法的帮助器提供服务  

  11. privatestring_name=null;  

  12. privatestring_folderPath=null;  

  13. privatestring_replicaMetadataFile=null;  

  14. privatestring_replicaIdFile=null;  

  15. //Theprovider'suniqueidentifier  

  16. SyncId_replicaId=null;  

  17. SyncIdFormatGroup_idFormats=null;  

  18. SyncSessionContext_currentSessionContext=null;  

  19. //Constructadatastorebyprovidinganamefortheendpoint(replica)and  

  20. //afiletowhichwe'llpersistthesyncmetadata(file)  

  21. publicMySyncProvider(stringfolderPath,stringname)  

  22. {  

  23. namename=name;  

  24. folderPathfolderPath=folderPath;  

  25. replicaMetadataFile=_folderPath.ToString()+""+_name.ToString()+".Metadata";  

  26. replicaIdFile=_folderPath.ToString()+""+_name.ToString()+".Replicaid";  

  27. SetItemIdFormatandReplicaIdFormatforusingGuidids.  

  28. idFormats=newSyncIdFormatGroup();  

  29. idFormats.ItemIdFormat.IsVariableLength=false;  

  30. idFormats.ItemIdFormat.Length=16;  

  31. idFormats.ReplicaIdFormat.IsVariableLength=false;  

  32. idFormats.ReplicaIdFormat.Length=16;  

  33. }  

  34. publicSyncIdReplicaId  

  35. {  

  36. get  

  37. {  

  38. if(_replicaId==null)  

  39. {  

  40. replicaId=GetReplicaIdFromFile(_replicaIdFile);  

  41. }  

  42. return_replicaId;  

  43. }  

  44. }  

  45. #regionMetadataStoreRelatedMethods  

  46. privatevoidInitializeMetadataStore()  

  47. {  

  48. Valuesforaddingacustomfieldtothemetadatastore  

  49. List<FieldSchema>fields=newList<FieldSchema>();  

  50. SyncIdid=ReplicaId;  

  51. Createoropenthemetadatastore,initializingitwiththeidformatswe'llusetoreferenceouritemsandendpoints  

  52. if(!File.Exists(_replicaMetadataFile))  

  53. {  

  54. fields.Add(newFieldSchema(TIMESTAMP_COLUMNNAME,typeof(System.UInt64)));  

  55. //创建一个具有指定名称和位置的元数据存储区文件,然后返回表示该文件的元数据存储区对象。  

  56. _metadataStore=SqlMetadataStore.CreateStore(_replicaMetadataFile);  

  57. //在元数据存储区创建和初始化副本的元数据,并返回一个用于访问该副本元数据的副本元数据对象。  

  58. _metadata=_metadataStore.InitializeReplicaMetadata(_idFormats,//提供程序的ID格式架构  

  59. replicaId,//与此元数据相关联的副本ID  

  60. fields,//每个元数据项的自定义元数据字段的架构信息集合。如果不存在自定义元数据字段,则可为null引用  

  61. null);//可用于更有效地查找元数据存储区中的项的索引架构列表。如果不存在自定义索引,则可以是null引用  

  62. }  

  63. else  

  64. {  

  65. _metadataStore=SqlMetadataStore.OpenStore(_replicaMetadataFile);//打开现有的元数据存储区文件,并返回表示该文件的元数据存储区对象  

  66. _metadata=_metadataStore.GetReplicaMetadata(_idFormats,_replicaId);//获取用于访问元数据存储区中的副本元数据的副本元数据对象。  

  67. }  

  68. }  

  69. privatevoidCloseMetadataStore()  

  70. {  

  71. metadataStore.Dispose();  

  72. metadataStore=null;  

  73. }  

  74. //Updatethemetadatastorewithchangesthathaveoccuredonthedatastoresincethelasttimeitwasupdated.  

  75. publicvoidUpdateMetadataStoreWithLocalChanges()  

  76. {  

  77. SyncVersionnewVersion=newSyncVersion(0,_metadata.GetNextTickCount());  

  78. metadata.DeleteDetector.MarkAllItemsUnreported();  

  79. foreach(Guididin_store.Ids)  

  80. {  

  81. ItemDatadata=_store.Get(id);  

  82. ItemMetadataitem=null;  

  83. //Lookupanitem'smetadatabyitsID  

  84. item=_metadata.FindItemMetadataById(newSyncId(id));  

  85. if(null==item)  

  86. {  

  87. Newitem,musthavebeencreatedsincethatlasttimethemetadatawasupdated.  

  88. Createtheitemmetadatarequiredforsync(givingitaSyncIDandaversion,definedtobeaDWORDandaULONGLONG  

  89. Forcreates,simplyprovidetherelativereplicaID(0)andthetickcountfortheprovider(everincreasing)  

  90. item=_metadata.CreateItemMetadata(newSyncId(id),newVersion);  

  91. item.ChangeVersion=newVersion;  

  92. SaveItemMetadata(item,data.TimeStamp);  

  93. }  

  94. else  

  95. {  

  96. if(data.TimeStamp>item.GetUInt64Field(TIMESTAMP_COLUMNNAME))//theitemhaschangedsincethelastsyncoperation.  

  97. {  

  98. //ChangedItem,thisitemhaschangedsincethelasttimethemetadatawasupdated.  

  99. //Assignanewversionbysimplystating"who"modifiedthisitem(0=local/me)and"when"(tickcountforthestore)  

  100. item.ChangeVersion=newVersion;  

  101. SaveItemMetadata(item,data.TimeStamp);  

  102. }  

  103. else  

  104. {  

  105. //Unchangeditem,nothinghaschangessojustmarkitaslivesothatthemetadataknowsithasnotbeendeleted.  

  106. _metadata.DeleteDetector.ReportLiveItemById(newSyncId(id));  

  107. }  

  108. }  

  109. }  

  110. Nowgobackthroughtheitemsthatarenolongerinthestoreandmarkthemasdeletedinthemetadata.   

  111. Thissetstheitemasatombstone.  

  112. foreach(ItemMetadataitemin_metadata.DeleteDetector.FindUnreportedItems())  

  113. {  

  114. item.MarkAsDeleted(newVersion);  

  115. SaveItemMetadata(item,0);//settimestampto0fortombstones  

  116. }  

  117. }  

  118. privatevoidSaveItemMetadata(ItemMetadataitem,ulongtimeStamp)  

  119. {  

  120. item.SetCustomField(TIMESTAMP_COLUMNNAME,timeStamp);  

  121. SaveItemMetadata(item);  

  122. }  

  123. privatevoidSaveItemMetadata(ItemMetadataitem)  

  124. {  

  125. metadata.SaveItemMetadata(item);  

  126. }  

  127. //MethodforcleaninguptombstonesolderthanacertainTimeSpan  

  128. publicvoidCleanupTombstones(TimeSpantimespan)  

  129. {  

  130. InitializeMetadataStore();  

  131. metadataStore.BeginTransaction();//对元数据存储区启动显式事务  

  132. metadata.CleanupDeletedItems(timespan);  

  133. metadataStore.CommitTransaction();//提交已对元数据存储区启动的显式事务  

  134. CloseMetadataStore();  

  135. }  

  136. #endregionMetadataStoreRelatedMethods  

  137. #regionKnowledgeSyncProviderOverrides  

  138. //BeginSessioniscalledatthebeginningofeachsyncoperation. Doinitializationhere. Forexampleupdate  

  139. //metadataifitwasnotupdatedastheactualdatawaschanged.  

  140. publicoverridevoidBeginSession(SyncProviderPositionposition,SyncSessionContextsyncSessionContext)  

  141. {  

  142. BeginSession();  

  143. currentSessionContext=syncSessionContext;  

  144. }  

  145. //EndSessioniscalledafterthesyncoperationiscompleted. Cleanuphappenshere.  

  146. publicoverridevoidEndSession(SyncSessionContextsyncSessionContext)  

  147. {  

  148. EndSession();  

  149. }  

  150. //Simplyaskthemetadatastoretocomputemychangebatchforme,providingthebatchsizeandtheknowledgeoftheotherendpoint!  

  151. //Theengineisaskingforthelistofchangesthatthedestinationproviderdoesnotknowabout.  

  152. //SyncKnowledge:表示副本所具有的有关自己项存储区的知识。  

  153. //此类型的所有公共静态(在VisualBasic中共享)成员都是线程安全的。不保证任何实例成员的线程安全。  

  154. publicoverrideChangeBatchGetChangeBatch(uintbatchSize,SyncKnowledgedestinationKnowledge,outobjectchangeDataRetriever)  

  155. {  

  156. ChangeBatchbatch=_metadata.GetChangeBatch(batchSize,destinationKnowledge);  

  157. changeDataRetriever=this;//thisiswherethetransfermechanism/protocolwouldgo.Foraninmemoryprovider,thisissufficient  

  158. returnbatch;  

  159. }  

  160. //ThisisonlycalledwhentheenginehasdetectedthatthedestinationisoutofdateduetoTombstonecleanup.  

  161. publicoverrideFullEnumerationChangeBatchGetFullEnumerationChangeBatch(uintbatchSize,SyncIdlowerEnumerationBound,SyncKnowledgeknowledgeForDataRetrieval,outobjectchangeDataRetriever)  

  162. {  

  163. FullEnumerationChangeBatchbatch=_metadata.GetFullEnumerationChangeBatch(batchSize,lowerEnumerationBound,knowledgeForDataRetrieval);  

  164. changeDataRetriever=this;//thisiswherethetransfermechanism/protocolwouldgo.Foraninmemoryprovider,thisissufficient  

  165. returnbatch;  

  166. }  

  167. //指定batchSize为10,以及相应的知识  

  168. publicoverridevoidGetSyncBatchParameters(outuintbatchSize,outSyncKnowledgeknowledge)  

  169. {  

  170. batchSize=10;  

  171. knowledge=_metadata.GetKnowledge();  

  172. }  

  173. //应用修改  

  174. publicoverridevoidProcessChangeBatch(ConflictResolutionPolicyresolutionPolicy,ChangeBatchsourceChanges,  

  175. objectchangeDataRetriever,SyncCallbackssyncCallback,SyncSessionStatisticssessionStatistics)  

  176. {  

  177. metadataStore.BeginTransaction();  

  178. 从原数据存储中获得取得本地所有修改  

  179. IEnumerable<ItemChange>localChanges=_metadata.GetLocalVersions(sourceChanges);  

  180. Createachangeapplierobjecttomakechangeapplicationeasier(maketheenginecallme  

  181. whenitneedsdataandwhenIshouldsavedata)  

  182. NotifyingChangeApplierchangeApplier=newNotifyingChangeApplier(_idFormats);  

  183. changeApplier.ApplyChanges(resolutionPolicy,sourceChanges,changeDataRetrieverasIChangeDataRetriever,localChanges,_metadata.GetKnowledge(),  

  184. _metadata.GetForgottenKnowledge(),this,_currentSessionContext,syncCallback);  

  185. metadataStore.CommitTransaction();  

  186. }  

  187. //Iffullenumerationisneededbecause thisproviderisoutofdateduetotombstonecleanup,thenthismethodwillbecalledbytheengine.  

  188. publicoverridevoidProcessFullEnumerationChangeBatch(ConflictResolutionPolicyresolutionPolicy,FullEnumerationChangeBatchsourceChanges,objectchangeDataRetriever,SyncCallbackssyncCallback,SyncSessionStatisticssessionStatistics)  

  189. {  

  190. metadataStore.BeginTransaction();  

  191. Getallmylocalchangeversionsfromthemetadatastore  

  192. IEnumerable<ItemChange>localChanges=_metadata.GetFullEnumerationLocalVersions(sourceChanges);  

  193. Createachangeapplierobjecttomakechangeapplicationeasier(maketheenginecallme  

  194. whenitneedsdataandwhenIshouldsavedata)  

  195. NotifyingChangeApplierchangeApplier=newNotifyingChangeApplier(_idFormats);  

  196. changeApplier.ApplyFullEnumerationChanges(resolutionPolicy,sourceChanges,changeDataRetrieverasIChangeDataRetriever,localChanges,_metadata.GetKnowledge(),  

  197. _metadata.GetForgottenKnowledge(),this,_currentSessionContext,syncCallback);  

  198. metadataStore.CommitTransaction();  

“服务端对WCF数据实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

服务端对WCF数据实例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

服务端对WCF数据实例分析

本篇内容介绍了“服务端对WCF数据实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!publicclassMySyncProvider:
2023-06-17

WCF数据量实例分析

这篇文章主要讲解了“WCF数据量实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF数据量实例分析”吧!在作WCF数据量并发的测试,同时启动40个客户端进程,在碰到比较耗时的服务处理
2023-06-17

WCF服务控制程序实例分析

这篇文章主要讲解了“WCF服务控制程序实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF服务控制程序实例分析”吧!这个示例中创建了一个存储在Web服务器上的简单Web服务和控制台客
2023-06-17

WCF集合类型中数据契约实例分析

本篇内容介绍了“WCF集合类型中数据契约实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!缺省情况下,WCF框架对集合类型是内建支持的,
2023-06-17

android针对json数据解析方法实例分析

本文实例讲述了android针对json数据解析方法。分享给大家供大家参考。具体如下: JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今
2022-06-06

数据库初始化及数据库服务端操作的示例分析

这篇文章将为大家详细讲解有关数据库初始化及数据库服务端操作的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。为什么要学习数据库?数据库的好处:实现持久化数据到本地使用完整的管理系统统一管理,易于查询
2023-06-21

SpringBoot2数据库实例分析

这篇文章主要介绍“SpringBoot2数据库实例分析”,在日常操作中,相信很多人在SpringBoot2数据库实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot2数据库实例分析”的疑
2023-06-29

服务器数据完整性问题实例分析

本篇内容主要讲解“服务器数据完整性问题实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“服务器数据完整性问题实例分析”吧!非法数据的潜在成因是什么?数据完整性能防止出现数据违背系统的指令被篡
2023-06-17

Python面向对象实现数据分析的实例详解

这篇文章主要通过几个实例为大家详细介绍了Python面向对象实现数据分析的方法,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以参考一下
2023-01-03

Python数据类型实例分析

本篇内容主要讲解“Python数据类型实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python数据类型实例分析”吧!一、内容概要字符串(str)列表(list)元组(tup)字典(di
2023-06-02

ECharts数据图表实例分析

这篇文章主要介绍“ECharts数据图表实例分析”,在日常操作中,相信很多人在ECharts数据图表实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ECharts数据图表实例分析”的疑惑有所帮助!接下来
2023-06-27

python数据处理实例分析

今天小编给大家分享一下python数据处理实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一,前言我们现在拿到了一个十
2023-06-30

Go数据类型实例分析

本篇内容介绍了“Go数据类型实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!每一个变量都有数据类型,Go中的数据类型有:简单数据类型:
2023-06-30

Visual Studio数据库对象的示例分析

小编给大家分享一下Visual Studio数据库对象的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Visual Studio还是比较常用的,于是我研究
2023-06-17

C#数据库连接对象举例分析

这篇文章主要讲解了“C#数据库连接对象举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#数据库连接对象举例分析”吧!处理C#数据库连接对象:对于数据库应用程序而言,连接到相应的数据库
2023-06-17

python数据分析绘图可视化实例分析

本篇内容介绍了“python数据分析绘图可视化实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:数据分析初始阶段,通常都要进行可视
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录