成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

服務端對WCF數據舉例說明

開發 后端
隨著時代的進步科技的發展WCF數據版本也快速的提升與升級,下面我就對升級前和升級后WCF數據做一下自己的解析。希望能夠對大家有幫助

到這里服務端的代碼就全部列舉出來了。當然本文中介紹的是元數據同步,而相應的SyncProvider實現是
通過MySimpleSyncProvider.cs文件提供的, #t#

當然為了不讓我的某些錯誤理解影響大家閱讀源碼,這里直接將相應的英文注釋也放在這里。 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/*Noindexestocreate*/);//可用于更有效地查找元數據存儲區中的項的索引架構列表。如果不存在自定義索引,則可以是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();  
責任編輯:chenqingxiang 來源: 機械工業出版社
相關推薦

2013-11-26 11:08:23

Linux命令diff

2009-12-07 18:26:36

WCF客戶端

2010-01-06 10:35:02

Json_Decode

2018-11-28 08:20:15

Linuxalias命令

2010-06-22 13:08:42

Linux At命令

2009-09-25 09:30:33

Hibernate持久

2009-12-08 18:08:43

WCF服務

2010-01-12 15:56:25

C++軟件

2010-01-18 17:31:54

C++編寫程序

2010-06-18 10:24:51

Linux acces

2010-01-21 09:53:23

C++操作符

2010-03-03 10:55:39

2010-03-04 13:21:32

linux壓縮命令

2010-02-24 15:42:03

WCF服務端安全

2010-01-06 16:54:07

.Net Framew

2010-01-08 17:06:52

C++代碼

2010-03-04 13:45:37

Linux壓縮命令

2011-09-09 09:44:23

WCF

2010-04-09 16:52:36

Unix操作系統

2009-12-08 16:15:13

WCF服務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久青 | 国产色在线 | 999精彩视频 | 大学生a级毛片免费视频 | 日韩一区二区在线观看视频 | 狠狠骚| 精品日本中文字幕 | 国产aⅴ爽av久久久久久久 | 国产视频久久久 | 中文字幕综合 | 免费午夜视频 | 国产男女视频 | 羞羞羞视频 | 国产成人久久精品一区二区三区 | aaaaaaa片毛片免费观看 | 在线看91| 国产成人精品久久二区二区91 | 国产精品成人一区 | 日本xx视频免费观看 | 国产传媒毛片精品视频第一次 | 九九久久在线看 | 美女操网站| 黄色网址在线免费观看 | 在线永久看片免费的视频 | 操久久 | 在线看成人av| 日韩欧美一级精品久久 | 色综合天天天天做夜夜夜夜做 | 在线免费亚洲视频 | 黄视频国产 | 九九精品在线 | 亚洲精品欧美一区二区三区 | 久久亚洲91 | 日韩精品久久久久 | 欧美不卡视频 | 精品久久久久久久人人人人传媒 | 久久精品日 | 中文字幕日韩欧美 | 国产伦精品一区二区三区精品视频 | 在线成人免费视频 | 91素人 |