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

WCF數(shù)據(jù)契約變更基本應用技巧分析

開發(fā) 開發(fā)工具
WCF數(shù)據(jù)契約變更的一些實際操作技巧將會在這里為大家詳細介紹一下,初學者們可以通過這里介紹的內(nèi)容充分掌握這一技巧。

WCF中,數(shù)據(jù)契約的應用是一個十分重要而且基礎的操作技術。那么今天我們將會在這篇文章中為大家詳細講解一下有關WCF數(shù)據(jù)契約變更的相關知識,以方便大家在實際應用中獲得一些幫助。#t#

Person DataContract 定義了兩個屬性:FirstName 和LastName。如果客戶端引用了這個服務,而你后來將LastName改成SurName,實際上客戶端不會中斷,但是在客戶端的代理類上的LastName屬性會顯示為空的。這是因為當客戶端解串信息到Person類的時候,不會找到任何叫做Lastname的元素。

這個簡單的WCF數(shù)據(jù)契約變更不會引起客戶端的錯誤,但它會導致更嚴重的問題:一個意外的行為。這個錯誤很容易跟蹤,但是跟蹤變更行為是非常困難的。

這個簡單的例子說明為什么任何服務變更和它們后續(xù)的影響是至關重要的。除非你自己知道利用你的web服務的每個客戶端應用程序,否則變更會是個災難。作為一名開發(fā)人員,你需要盡一切努力使你的客戶端避免變更的出現(xiàn)。

首先,你可以應用一些***的方法來幫助客戶端免于內(nèi)部變更。WCF數(shù)據(jù)契約變更的更新版本如以下所示:

 

 

  1. [DataContract(Namespace="http://types.mycompany.com/2009/05/25",
     
    Name="PersonContract")]   
  2. public class Person : IExtensibleDataObject  
  3. {  
  4. private string _firstName = string.Empty;  
  5. private string _lastName = string.Empty;  
  6. private ExtensionDataObject _extensionData;  
  7. [DataMember(Name="FirstName")]  
  8. public string FirstName  
  9. {  
  10. get { return _firstName; }  
  11. set { _firstName = value; }  
  12. }  
  13. [DataMember(Name="LastName")]  
  14. public string LastName  
  15. {  
  16. get { return _lastName; }  
  17. set { _lastName = value; }  
  18. }  
  19. public ExtensionDataObject ExtensionData  
  20. {  
  21. get { return _extensionData; }  
  22. set { _extensionData = value; }  
  23. }  

 

在DataContract上增加的Namespace, Name和Order參數(shù)以及DataMember屬性控制DataContractSerializer的行為。當服務的reference被添加的時候,這個增加的東西生成客戶端代理。Name參數(shù)讓serializer使用所指出的值,而不是實際公布的成員或是屬性的名字。這個方法在沒有影響客戶端的情況下允許變更的內(nèi)部執(zhí)行。例如,考慮以下的WCF數(shù)據(jù)契約變更:

 

  1. [DataMember(Name="LastName")]   
  2. public string SurName  
  3. {  
  4. get { return _lastName; }  
  5. set { _lastName = value; }  

將"FirstName" 改成"SurName"的屬性名字變更不會中斷現(xiàn)有的客戶端,因為客戶端使用的Name參數(shù)仍然是"FirstName."。只是內(nèi)部執(zhí)行被該改變了。

第二個顯著的變化是增加了IExtensibleDataObject接口。執(zhí)行這個接口允許客戶端保留在契約中沒有明確定義的數(shù)據(jù)。這似乎看上去沒什么用,但是在客戶端希望執(zhí)行示例Person對象并返回它的情況下,客戶端可以保留新的數(shù)據(jù)項目。例如,用以下不會強迫現(xiàn)有的客戶端進行更新的新成員來更新PersonContract:

 

  1. [DataMember(Name = "MiddleName"Order = 3)]   
  2. public string SurName  
  3. {  
  4. get { return _middleName; }  
  5. set { _middleName = value; }  

實際上,這個成員通過往返過程的服務,允許現(xiàn)存的客戶端保留放在"MiddleName"中的值。執(zhí)行IExtensibleDataObject對你的WCF數(shù)據(jù)契約變更未來的論證是一個有益的方法。

請記住,實際上客戶端對一個外部構架有驗證信息的選擇權。(對WCF應用程序添加信息構架驗證的詳細討論,請閱讀此文章this article)。因此,當處理數(shù)據(jù)契約的變更時你有兩種情況需要考慮:有構架驗證和沒有構架驗證。

當客戶端添加構架驗證的時候,在數(shù)據(jù)契約中進行添加,變更或是減去任何項目將導致驗證的失敗。所以,在嚴格的構架驗證被使用的情況下,不能對契約進行改變。相反,你需要創(chuàng)建一個完整的新的契約并在這個契約中使用不同的命名空間來顯示新版本。

例如,從執(zhí)行的角度來看,你需要兩個單獨的服務終端使這兩個版本可用:

Original Version: [DataContract(Namespace="http://schemas.mycompany.com/2009/05/25")]

New Version: [DataContract(Namespace=http://schemas.mycompany.com/2009/06/18)]

幸運的是,嚴格的構架驗證不是默認的行為。這意思是在沒有中斷服務端的情況下,你可以添加或刪除數(shù)據(jù)成員。但是,由于先前所討論的有不預期的行為會產(chǎn)生,刪除數(shù)據(jù)成員不是一個好主意。另一方面,添加一個數(shù)據(jù)成員是很容易做到的,而且consumers會忽略它們還沒有意識到的外部成員。

關鍵的做法是使用DataMember屬性(先前討論過的)的Order參數(shù)。使用這個參數(shù)可以告訴serializers什么樣的順序(每個成員的)可以出現(xiàn)在XML中

來自基礎類型的成員

沒有order參數(shù)(按字母順序排列)的成員

有order參數(shù)(按值排列)的成員

WCF數(shù)據(jù)契約變更考慮的***情況是改變一個數(shù)據(jù)成員的類型。這種情況下,***的方法是創(chuàng)建一個新版本的數(shù)據(jù)契約并帶有新的服務契約,執(zhí)行和終端。

責任編輯:曹凱 來源: IT專家網(wǎng)
相關推薦

2010-03-01 16:04:31

WCF服務契約

2010-02-25 10:52:29

WCF響應服務

2010-02-26 13:40:28

WCF消息頭

2010-03-01 09:48:23

WCF會話服務

2010-03-01 15:40:04

WCF實例停用

2010-02-25 18:04:02

WCF IIS宿主

2010-02-23 15:58:57

WCF Session

2010-03-01 11:24:31

WCF面向服務

2010-02-22 17:51:46

WCF傳較大數(shù)據(jù)

2010-02-22 15:27:05

WCF數(shù)據(jù)契約

2009-11-09 09:23:10

WCF數(shù)據(jù)契約

2009-11-06 09:39:40

WCF契約

2010-02-23 17:44:22

WCF數(shù)據(jù)契約

2013-12-12 16:10:21

Lua腳本語言

2009-11-06 15:02:47

WCF契約查詢

2010-02-06 16:16:01

C++冒泡排序

2010-02-25 16:45:13

WCF應用技巧

2009-11-09 14:46:09

WCF集合契約等價

2010-02-22 16:26:47

WCF傳輸數(shù)據(jù)

2010-03-02 09:24:22

WCF變更行為
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美高清性xxxxhdvideosex | 免费看一区二区三区 | 免费看黄色国产 | 久久久国产一区二区三区四区小说 | 懂色一区二区三区免费观看 | 日韩一级| 中文字幕一区二区三区四区 | 九九热精品视频 | 国产精品久久久久久久一区二区 | 色婷婷一区| av免费网站在线观看 | 日本又色又爽又黄的大片 | 日韩a级片| 欧美日韩高清在线一区 | 国产传媒在线播放 | 91在线一区二区 | 成人亚洲精品 | 奇色影视 | 成人av看片| 一区二区视频在线观看 | 91se在线 | 欧美日韩亚洲二区 | 国产成人av电影 | 亚洲一区精品在线 | 久久99精品久久久久久琪琪 | 欧美一二区 | 亚洲精品国产区 | 久久久久国产精品 | 日韩一级 | 中文字幕在线视频一区二区三区 | 一区二区精品 | 国产传媒毛片精品视频第一次 | 成人午夜免费福利视频 | 九九久久久 | 日韩1区 | 久久一二 | 欧美精品v | 精品在线一区二区三区 | 国产一区二区精品在线观看 | 欧美日韩一区二区在线观看 | 一区在线播放 |