精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解WCF中的變更處理:不可不知的最佳實踐

譯文
開發 開發工具
WCF是基于Windows平臺下開發和部署服務的軟件開發包(SDK)。WCF為服務提供了運行時環境,使得開發者能夠將CLR類型公開為服務,又能夠以CLR類型的方式使用服務。理論上講,創建服務并不一定需要WCF,但實際上,使用WCF卻可以使得創建服務的任務事半功倍。本文講解WCF中的變更處理。

【51CTO快譯】變更總是存在的,包括需求變更、環境變更和過程變更。這些因素加在一起使你的WCF服務也會發生變更,幸運的是,可以在設計之初就采取一些方法來盡量避免這些變更,或者說減少變更給用戶和自己帶來的影響。

本文探討的不僅僅是前期如何做才能減少變更次數,同時還討論了在遇到未曾預見的大型變更前該如何應對。

51CTO編輯推薦:WCF開發基礎專題

確定變更

在開始著手處理變更之前,有必要弄清楚在基于WCF的服務中發生變更意味著什么,下面的行為構成了變更:

1、數據契約

(1)增加一個數據成員

(2)移除一個數據成員

(3)重命名一個數據成員

(4)改變數據成員的類型

2、服務契約

(1)增加一個操作

(2)移除一個操作

(3)重命名服務契約

3、操作契約

(1)重命名一個操作

(2)修改操作的簽名

這些變更可能源于新的業務需求、硬件整合、業務兼并、新條例或任何其它外部因素,底線是當某些東西超出了開發人員的控制變更外,軟件就必須要調整,在WCF世界中處理變更總是有好消息也有壞消息,因為有時候處理起來很簡單,但有時候會讓你懼怕,但卻不得不響應。

WCF中的版本和變更控制

在.Net世界中,處理變更時第一個要考慮的就是如何控制版本,通過版本組裝,可以在后續的組件版本中允許無法預料的或有問題的變更,使用這種方式,受影響的客戶端可以繼續使用舊版本,你就可以避免因變更引起的頭痛問題。

那么WCF支持版本控制嗎?答案有點擔憂。當你在WCF中創建一個數據契約時,這個契約會生成一個XML schema,引用這個schema的用戶使用它生成一個代理類,嚴格地說,數據沒有經過這個schema驗證,正如你將看到的,這將對服務使用者產生一些異常或令人沮喪的行為。

在進入細節前,仔細研究下面例子自己先熟悉一下,它提供了本文剩余部分討論的基礎:

namespace SampleService

{

    [ServiceContract]

    public interface IPersonService

    {

        [OperationContract]

        Person GetPerson(int personId);

        [OperationContract]

        void UpdatePerson(Person p);

    }

    public class Person

    {

        private string _firstName = string.Empty;

        private string _lastName = string.Empty;

        [DataMember]

        public string FirstName

        {

            get { return _firstName; }

            set { _firstName = value; }

        }

        [DataMember]

        public string LastName

        {

            get { return _lastName; }

            set { _lastName = value; }

        }

    }

 

數據契約變更

Person DataContract定義了兩個屬性:FirstName和LastName,如果某個客戶的引用了這個服務,你接著將LastName改為SurName,客戶的不會被真正斷開,只不過在客戶端的代理類中,LastName屬性將會顯示為空,這時因為當客戶的將消息持久化到Person類時,發現沒有任何名叫LastName的元素了。

這個簡單的變更不會讓客戶端出現異常錯誤,但糟糕的是會導致一個異常行為,除非你親自了解每個客戶的應用程序使用的web服務,修改將會是災難性的,作為一名開發人員,你應該盡一切努力來保護變更給客戶帶來的影響。

最初,你可以先應用一些最佳實踐,幫助那些孤立的客戶端應對變更,一個數據契約的升級版本看起來如:

 

在DataContract和DataMember屬性上增加了Namespace、Name和Order參數來控制DataContractSerializer的行為,引用這些服務時會增加一個客戶端代理,Name參數會導致串行轉換器使用標示的值,而不是真實的公共成員或屬性的名字,這種方法允許在內部實現變更,不影響客戶端,如下面的變更:

[DataMember(Name="LastName")]

    public string SurName

    {

        get { return _lastName; }

        set { _lastName = value; }

    } 

 

屬性名從LastName變成SurName將會中斷現有的客戶端,因為客戶端使用的Name參數任然是LastName,僅僅內部實現變更了。

第二個顯而易見的變更是增加了IExtensibleDataObject接口,實現這個接口讓未在契約中明確定義的客戶端保留數據,這看起來沒什么作用,但是當客戶端希望在同一個Person對象上執行處理并返回時就有用了,客戶端可以保留新的數據項。例如,使用下面的新成員更新PersonContract不會強制現有的客戶端也跟著一起更新:

[DataMember(Name = "MiddleName", Order = 3)]

public string SurName

{

    get { return _middleName; }

    set { _middleName = value; }

 

事實上,這個成員將允許現有的客戶端保留一個值放于MiddleName,實現IExtensibleDataObject對于未來你的數據契約是一個好方法,作為一個最佳實踐,你應該在所有數據契約中使用它。

請記住,客戶端實際上可以選擇一個外部schema驗證消息,因此,你在處理數據契約變更時有兩件事需要考慮:有schema驗證和無schema驗證。

當客戶端添加了schema驗證后,數據契約中任何添加、修改或減去數據項的行為都將導致驗證失敗,因此,在實際生活照,試驗了任何嚴格的schema驗證后,契約就不應該改變了,相反,你應該創建一個全新的契約并在契約中使用不同的命名空間,以表明是新版本。

例如,從實現的視角來看,你應該需要兩個獨立的服務點來使這兩個版本可用:

 

幸運的是,嚴格的schema驗證不是默認行為,這意味著你在不中斷客戶端的情況下可以添加或移除數據成員,然而,根據前面討論過的異常行為,移除一個數據成員不是個好主意,換句話說,增加一個數據成員容易,用戶會忽略他們不知道的額外成員。

最關鍵的是使用DataMember屬性的Order參數,使用這個參數告訴串行轉化器在XML中各個成員應該顯示成怎么樣,一個非預期的變更可能會導致XML與原始schema不一致,從一開始就使用Order參數可以避免這個問題,如果你不使用Order參數,串行轉化器將按照下面的順序執行:

1、來自基礎類型的成員

2、無Order參數的成員(按字母順序)

3、有Order參數的成員(按值的順序)

數據契約變更的最后一種情況是修改數據成員的類型,在這種情況下,最佳的做法是和新的服務契約、實現和終結點一道創建一個新版本的數據契約。

服務契約變更

再說一次,所有服務契約應該按照最佳實踐,在ServiceContract屬性上同時使用Name和Namespace參數,Person服務契約的一個更新版本看起來如:

 

和數據契約一樣,使用Name隔離服務用戶和真實接口名,允許內部實現按需變更,Namespace允許你在將來對契約進行版本控制,記住新版本也需要新的終點。

可以在不中斷現有用戶的情況下往服務契約中添加操作,用戶會忽略新增加的操作。另一方面,移除操作將會中斷現有用戶,如同所有的中斷變更,移除操作需要一個新版本和一個新的終點。

操作契約變更

與服務契約和數據契約一樣,應該在OperationContract屬性上使用Name參數:

[OperationContract(Name="GetPerson"]

Person GetPerson(int personId); 

 

再說一次,在內部實現中用戶和變更是隔離的。

最后一個需要考慮的變更是操作契約的簽名,這是一個中斷變更,有兩種解決方案:創建一個新版本或在服務契約上添加一個新操作。

遵守你的承諾

變更是不可避免的,但要做好規劃,并遵循一些原則,可以講WCF服務上變更的影響降到最低,記住,當你發布一個服務時,你應該向用戶提供一個承諾,讓他們保證遵守契約,在現有的契約上做改動不是一件好事。

為此,請記住下面這些最佳實踐:

1、在所有契約上使用Name和Namespace參數;

2、在數據成員上總是使用Order參數;

3、在所有數據契約上實現IExtensibleDataObject;

4、為契約版本控制使用命名空間;

5、記住所有新版本都需要新的終點;

6、使用嚴格的schema驗證時,不要修改契約,創建一個新版本;

7、從服務契約中移除一個操作時,請創建一個新版本;

8、改變一個操作的簽名時,請創建一個新版本。

記住這些最佳實踐后,在處理你自身或服務用戶提出的變更時就會游刃有余了。

原文:Best Practices for Handling Change in Your WCF Applications

作者:Steve Stefanovich

【編輯推薦】

  1. 使用ASP.NET AJAX調用WCF服務項模板
  2. 詳解自定義托管宿主WCF解決方案開發配置過程
  3. 詳解WCF可擴展框架中的行為擴展
  4. WCF中通過Dispose有效實現重用
  5. WCF開發基礎
責任編輯:yangsai 來源: 51CTO.com
相關推薦

2023-09-20 09:00:00

2011-05-19 15:41:18

2010-06-11 14:46:38

可路由協議

2020-11-30 13:12:04

Linux文本命令

2015-01-15 09:34:28

2024-09-23 21:05:45

2015-07-21 05:55:12

2019-12-02 14:14:20

緩沖系統調用函數

2010-04-16 17:09:18

Oracle查看鎖

2020-11-11 21:27:55

緩沖文件調用

2014-06-09 13:21:27

2018-06-12 11:05:33

2025-01-03 17:10:54

2024-03-21 08:57:39

語言軟件開發

2014-06-20 14:35:48

浪潮數據

2010-10-27 10:39:44

求職

2015-07-30 17:30:43

Linux命令

2020-01-17 06:12:10

物聯網IOT技術

2019-08-18 23:10:14

數據科學算法數學

2021-01-27 09:45:17

負載均衡
點贊
收藏

51CTO技術棧公眾號

精品视频1区2区| 中文字幕乱码一区二区免费| 久久久久久国产精品| 中文字幕在线观看网址| 久久电影天堂| 污片在线观看一区二区| 亚洲精品日韩在线观看| 韩国中文字幕hd久久精品| 久久福利毛片| 欧美剧在线观看| 日本成人午夜影院| 国产精品videossex| 欧美日韩一本到| 青娱乐自拍偷拍| 天堂资源在线中文| 91年精品国产| 69堂成人精品视频免费| 欧美日韩在线视频播放| 国户精品久久久久久久久久久不卡| 亚洲一区二区久久| 在线观看国产免费视频| 国产精品一区二区精品| 欧美自拍偷拍一区| 成人毛片视频网站| 99久久精品免费看国产小宝寻花| 中文字幕一区二区三中文字幕| 欧美日韩亚洲在线| 日本精品一区二区在线观看| 国产一区二区三区不卡在线观看| 国产精品99久久久久久白浆小说| 免费看日韩毛片| 欧美日韩中文| 欧美高清视频一区二区| 永久免费看mv网站入口| 欧美一区二区三| 亚洲网址你懂得| mm131丰满少妇人体欣赏图| 成人激情自拍| 精品国产污网站| 男人操女人下面视频| 成人午夜sm精品久久久久久久| 色综合久久六月婷婷中文字幕| 日韩在线综合网| 丰满诱人av在线播放| 一区二区三区高清在线| 日本天堂免费a| a级网站在线播放| 亚洲三级在线免费观看| av不卡在线免费观看| 欧美激情午夜| 国产精品女主播av| 夜夜爽99久久国产综合精品女不卡| 国产在线超碰| 中文字幕精品在线不卡| 一区在线电影| 久操视频在线播放| 亚洲私人影院在线观看| 日本一级淫片演员| av免费在线网站| 亚洲制服丝袜av| 日韩精品一区在线视频| av成人 com a| 一本色道久久综合亚洲91| 欧美精品色婷婷五月综合| 亚洲wwww| 在线综合视频播放| 欧美一级大片免费看| 盗摄牛牛av影视一区二区| 亚洲精品美女久久| 中文字幕在线1| 国产大片一区| 欧美精品18videosex性欧美| 成年人免费高清视频| 日韩福利视频网| 成人黄色中文字幕| 成人午夜精品福利免费| 91丨porny丨户外露出| 日本一区精品| caoporm免费视频在线| 亚洲国产精品欧美一二99| 欧美极品欧美精品欧美图片| 日韩福利影视| 亚洲精品在线观| 丰满的亚洲女人毛茸茸| 欧美91福利在线观看| 欧美一级在线亚洲天堂| ,亚洲人成毛片在线播放| 成人综合婷婷国产精品久久免费| 久久综合九色99| 五月香视频在线观看| 亚洲影院理伦片| 青青在线视频免费| 青草伊人久久| 国产午夜精品全部视频播放| 国产av无码专区亚洲av毛网站| 亚洲欧美不卡| 亚洲自拍高清视频网站| 毛片在线免费| 一区二区三区高清不卡| www.精品在线| 欧亚精品一区| 欧美猛男性生活免费| 国产成人无码一区二区在线播放| 国产剧情一区二区| 日韩成人av网站| 国内小视频在线看| 欧美人伦禁忌dvd放荡欲情| 国产伦精品一区二区免费| 日韩黄色大片网站| 日本不卡免费高清视频| 亚洲不卡免费视频| 成人免费在线视频| 成年人在线看片| 红杏视频成人| 美女精品久久久| 一区二区三区麻豆| 91视频xxxx| 国产自产在线视频| 精品视频国内| xvideos国产精品| 无码久久精品国产亚洲av影片| 91在线视频网址| 日本免费a视频| 久久99成人| 久久久av亚洲男天堂| 中文字幕视频免费观看| 久久久久久亚洲综合影院红桃| 久久99久久99精品| 日本久久伊人| 萌白酱国产一区二区| 91在线公开视频| 国产精品久久久久久久久免费桃花| 99色精品视频| 小说区图片区色综合区| 88xx成人精品| 性插视频在线观看| 亚洲国产美国国产综合一区二区| 第一页在线视频| 午夜精品偷拍| 成人xxxxx色| segui88久久综合| 精品福利视频一区二区三区| 国产极品美女高潮无套嗷嗷叫酒店| 国产精品一区二区久久精品爱涩 | 亚洲手机成人高清视频| 色综合色综合色综合色综合| 999视频精品| 成人免费在线网址| 中日韩高清电影网| 欧美xxxxx牲另类人与| 久草视频免费在线| 99久久精品免费看国产免费软件| 无码 制服 丝袜 国产 另类| 久久精品国产亚洲5555| 91高清在线免费观看| 奇米影视888狠狠狠777不卡| 色国产精品一区在线观看| 在线观看免费黄色网址| 精品一区二区三区免费毛片爱| 在线视频不卡国产| 精品中文在线| 午夜精品久久久久久久男人的天堂| 天天av天天翘| 欧美午夜影院一区| 日本一二三区在线观看| 国产揄拍国内精品对白| 欧美日韩福利在线| 竹菊久久久久久久| 91精品国产综合久久香蕉最新版| av官网在线播放| 亚洲黄色在线看| 激情网站在线观看| 亚洲精品国产a| 国产精品久久不卡| 美女一区二区视频| 欧洲精品在线播放| 欧美女优在线视频| 91综合免费在线| 欧美办公室脚交xxxx| 最新91在线视频| 人人妻人人玩人人澡人人爽| 欧美亚洲综合另类| 国产亚洲第一页| 久久精品在这里| 中文字幕一区二区三区四| 99pao成人国产永久免费视频| 日本视频一区在线观看| 日韩一区免费| 国产精品2018| 成全电影大全在线观看| 一区二区在线视频| 欧美一级淫片免费视频魅影视频| 欧美羞羞免费网站| 国产亚洲色婷婷久久99精品| 国产精品天干天干在观线| 日批在线观看视频| 激情综合色综合久久综合| 国产午夜大地久久| 91精品国产福利在线观看麻豆| 精品国产乱码久久久久久丨区2区| 日韩亚洲国产免费| 人人做人人澡人人爽欧美| 欧美xxxx少妇| 精品国产欧美成人夜夜嗨| 日本在线丨区| 精品国产乱码久久久久久免费| 自拍偷拍色综合| 精品国产乱码久久久久酒店| 日本中文字幕免费在线观看| 日本一区二区三区免费乱视频| 国产chinese中国hdxxxx| 久草热8精品视频在线观看| 国产xxxxx在线观看| 伊人影院久久| 91国在线高清视频| 香蕉久久网站| 亚洲开发第一视频在线播放| 视频福利一区| 精品视频一区二区| caoporn成人| 91精品久久香蕉国产线看观看| 看片一区二区| 国产精品视频免费在线| 精品亚洲美女网站| 秋霞午夜一区二区| 久久男人av资源站| 国内精品久久久久影院优| 18+视频在线观看| 俺去亚洲欧洲欧美日韩| 男人影院在线观看| 色婷婷综合成人av| av黄色在线观看| 国产一区二区动漫| 成人在线免费电影| 国产亚洲欧洲在线| 都市激情在线视频| 尤物yw午夜国产精品视频| 美丽的姑娘在线观看免费动漫| 亚洲欧美一区二区激情| 你懂得在线网址| 亚洲毛片在线看| 黄色软件在线| 一区二区三区日韩在线| 国产三区四区在线观看| 中文字幕日韩专区| 黄色成人在线观看| 欧美肥婆姓交大片| 18aaaa精品欧美大片h| 51精品国产黑色丝袜高跟鞋| 在线看片福利| 国产精品久久久久久av福利软件| 黑人巨大精品欧美一区二区桃花岛| 人人做人人澡人人爽欧美| 欧美日韩激情电影| 91午夜理伦私人影院| 亚洲午夜免费| 久久99九九| 欧美日韩国产高清电影| 中文精品一区二区三区| 欧美日韩亚洲国产精品| 看av免费毛片手机播放| 日韩精品一级中文字幕精品视频免费观看| 成人3d动漫一区二区三区| 久久精品国产亚洲高清剧情介绍| 久久6免费视频| 成人av资源站| 欧美三级视频网站| 一区二区三区加勒比av| 高清乱码免费看污| 在线播放日韩导航| 无码精品人妻一区二区| 亚洲天堂影视av| 伊人影院蕉久影院在线播放| 26uuu久久噜噜噜噜| 成人黄页网站视频| 99久久一区三区四区免费| 偷拍自拍亚洲色图| 一级特黄录像免费播放全99| 欧美网站在线| 成人亚洲视频在线观看| 国产美女视频91| 国产传媒第一页| 亚洲三级免费电影| 波多野结衣啪啪| 欧美一区二区在线观看| 日韩精品福利| 欧美成人免费观看| 日日av拍夜夜添久久免费| 亚洲qvod图片区电影| 天天久久夜夜| 成人小视频在线观看免费| 三级亚洲高清视频| 水蜜桃av无码| 亚洲色图视频免费播放| 91丨九色丨海角社区| 亚洲第一网站免费视频| 1024免费在线视频| 欧美亚洲一区在线| 日本免费精品| 亚洲不卡1区| 亚洲在线免费| 亚洲欧美激情一区二区三区| 国产精品久久久久久久久免费樱桃| 国产精品免费av一区二区| 日韩一区二区在线观看| 在线观看美女网站大全免费| 国产91精品青草社区| 91综合精品国产丝袜长腿久久| 亚洲第一在线综合在线| 亚洲一区二区免费看| 亚洲精品鲁一鲁一区二区三区| 国产精品天干天干在线综合| 91精品国产综合久久久蜜臀九色 | 国产无套精品一区二区三区| 久久婷婷国产综合国色天香| 国语对白一区二区| 日韩片之四级片| 米奇精品一区二区三区| 国产精品视频地址| 欧美性感美女一区二区| 97视频在线免费播放| 99精品久久99久久久久| 国产一级一级片| 日韩精品一区二区三区老鸭窝| 老司机精品影院| 成人综合国产精品| 久久中文字幕二区| 高清av免费看| 日本一区二区不卡视频| 日韩精选在线观看| 亚洲午夜久久久影院| 欧美黑人疯狂性受xxxxx野外| 鲁鲁视频www一区二区| 国产精品毛片在线看| 国产高清自拍视频| 一本大道久久a久久综合婷婷| 天堂中文在线8| 欧美亚洲免费电影| 亚洲精华一区二区三区| 欧美日韩激情视频在线观看| 不卡高清视频专区| 国产精品久久久久久久妇| 日韩精品免费在线视频观看| 亚洲校园激情春色| 日韩电影在线播放| 麻豆极品一区二区三区| 亚洲波多野结衣| 日韩一级二级三级| 波多野结衣乳巨码无在线观看| 韩国一区二区三区美女美女秀 | 婷婷国产在线综合| 香蕉国产在线视频| 国产999精品久久久| 日韩aaaa| 日本高清免费观看| 亚洲综合激情小说| 四虎国产精品永远| 国产精品第1页| 91精品国产自产拍在线观看蜜| 4438x全国最大成人| 天天影视网天天综合色在线播放| 台湾av在线二三区观看| 国产美女搞久久| 亚洲国产一区二区三区在线播放| 日韩精品xxx| 日韩欧美有码在线| 亚洲欧美视频一区二区| 99精彩视频| 久久狠狠婷婷| 少妇视频一区二区| 亚洲成人久久一区| 无人区在线高清完整免费版 一区二| 一区二区三区四区视频在线| 丰满少妇久久久久久久| 四虎影院在线免费播放| 久久国产精品久久久久久| 欧美人与动xxxxz0oz| 三级a三级三级三级a十八发禁止| 亚洲乱码国产乱码精品精98午夜 | 亚洲视频在线观看免费视频| 欧美老肥婆性猛交视频| 九九热精品视频在线观看| 成人高清在线观看视频| 欧美日韩午夜视频在线观看| 最新真实国产在线视频| 国产精品日韩一区二区三区| 青青草国产成人99久久| 久久精品美女视频| 最新国产精品拍自在线播放| 卡通动漫精品一区二区三区| 国产免费中文字幕| 欧美日韩中文字幕| 91国内在线| 亚洲视频sss| 99国产精品久久久| 国产欧美综合视频| 国产精品久久久久久久7电影| 亚洲国产一区二区三区a毛片| 欧美福利在线视频| 亚洲男人天堂2024|