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

WCF消息頭基本應用技巧講解

開發 開發工具
我們今天將會通過這篇文章中介紹的內容為大家詳細介紹一下有關WCF消息頭的類型,以及相關創建方法,以方便大家理解。

WCF中有一種叫做MessageHeaders的消息頭,能夠幫助我們在實際應中獲得很大的幫助。那么今天,我們將會在這里為大家詳細介紹一下有關WCF消息頭的基本應用方法,希望能給大家帶來一些幫助。#t#

WCF消息頭類型

因為SOAP消息可能包含很多消息頭塊,所以在一個Message類型里,我們需要一種表示一組消息頭塊對象的方法。MessageHeaders就是這個作用,并且它定義了一個MessageHeaders類型的只讀屬性Headers。Headers屬性是我們在Message里增加、修改、查詢和移除MessageHeader的主要方式。在某種意義上,本節主要是講解MessageHeaders類型,以及可以應用到Message類型的Headers屬性上的所有信息。與Message相反,在實例化一個Message之后,我們可以隨便修改Headers屬性的內容。MessageHeaders是一個具體類,而不是抽象類,它不包含工廠方法。這一點值得注意,因為本章討論過的類型都是抽象的并且定義了工廠方法。

像前面提到的一樣, MessageHeaders,在一定層次上,是一組MessageHeader對象。MessageHeader類型的對象模型,奇怪的是少了一個可以返回MessageHeader對象集合的成員。作為替代,MessageHeaders實現了IEnumerable<MessageHeaderInfo> and IEnumerable接口。這意味著我們可以簡單地迭代MessageHeaders類型來查看所有的消息頭塊(在MessageHeaders對象賦值以后)。

注意

為了完整,我必須提下MessageHeaderInfo類型,它是MessageHeader的基類。MessageHeaderInfo定義了幾個表示SOAP消息頭塊的屬性,比如:Actor、MustUnderstand等等。太白地說,我們看不出這個類型存在的理由,因為MessageHeader是抽象的。

創建一個WCF消息頭對象

MessageHeaders類型定義了三個公開的構造函數。這里要著重指出的是絕大多數開發人員都不會直接使用這些構造函數,因為Message類型(子類型)底層機制會為你調用其中的一個構造函數。如果你要選擇繼承Message類型的話,或許需要調用其中一個構造函數去設置Message的消息頭部分。

其中一個構造函數接受MessageHeaders類型的參數。構造函數會對MessageHeaders執行深拷貝,并把它存儲在MessageHeaders實例里。

另外一個構造函數接受一個MessageVersion類型的參數,如你所料,這是設置MessageHeaders 實例的SOAP version和WS-Addressing version。***一個構造函數接受一個MessageVersion類型和一個Int32類型的參數。這個構造函數設置SOAP和WS-Addressing的版本,同樣包括內部消息頭塊list里元素的個數。記住實際元素的個數可以超過Int32設置的個數。如果我們知道將要增加到MessageHeaders對象里的消息頭的個數,使用這個重載方法,它會提升性能,因為在對象的整個生命周期里早期的時候,已經設置好了合適的存儲空間。

添加一個WCF消息頭

一旦MessageHeaders對象實例化完畢,我們需要給它增加一個或者多個MessageHeader對象。MessageHeaders類型定義了接受一個MessageHeader 對象作為參數的Add方法。然后把插入MessageHeader 對象插入到消息頭塊列表的最末端。

如果我們需要把MessageHeader對象插入到特定的位置,我們可以使用Insert方法。它接受一個Int32 和MessageHeader類型的參數。Int32類型的參數表示要插入的位置,MessageHeader參數是要插入的對象。非常有意思的是MessageHeaders把MessageHeader對象存放在一個數組結構中。如果我們傳遞的索引大于數組的大小,方法會拋出一個ArgumentOutOfRangeException。

獲取WCF消息頭的值

當一個程序接收、解碼和反序列化一個stream到Message對象的時候,我們經常需要獲取一個或者多個消息頭塊的值。因為MessageHeader類型提供了多種方式,我們必須求助于MessageHeaders類型。

一種方式,我們在MessageHeaders對象里獲取特定的MessageHeader,就是使用索引。為了找到特定消息頭塊的索引,我們可以調用兩個FindHeader方法。它們都接受表示nam和namespace的String參數。其中一個方法接受一個表示能夠與消息頭塊交互的actor的String參數。它們的返回值都是Int32。如果沒有匹配的消息頭塊,FindHeader回返回-1。如果找到多個消息頭塊,會返回***個匹配的消息頭塊的索引。

備注

我的觀點,這不是一個良好的設計, 它違反了Microsoft文檔里已經規定的***實踐和關于framework設計的內部標準。它應該命名為為TryFindHeader或者如果沒有找到匹配的消息頭就應該拋出一個異常。拋開我的看法,當調用FindHeader方法的時候,我們必須檢查返回的值是否為-1。

在找到消息頭塊的索引以后(只要不是-1),我們隨后就可以檢查消息頭塊的值。為此,我們調用其中一個GetHeader<T> 方法。重載的方法接受各種參數,包括一個消息頭塊的索引和一個自定義的序列化器。其中三個重載方法接受的String參數可以映射到FindHeader方法接受的參數上。內部來看,這些重載方法調用適當的FindHeader方法,并且檢查返回的值是否是-1.與FindHeader相反,如果沒有找到匹配的消息頭塊,GetHeader<T>方法會拋出個異常。

責任編輯:曹凱 來源: CSDN
相關推薦

2010-02-25 10:52:29

WCF響應服務

2010-03-01 09:48:23

WCF會話服務

2010-03-01 15:40:04

WCF實例停用

2010-03-01 16:04:31

WCF服務契約

2010-02-25 18:04:02

WCF IIS宿主

2010-03-01 18:11:40

WCF數據契約變更

2010-02-23 15:58:57

WCF Session

2010-03-01 11:24:31

WCF面向服務

2010-02-22 16:19:25

WCF自托管

2010-03-04 14:57:08

Python解密VBS

2009-12-21 14:49:27

2010-02-22 17:21:02

WCF消息交換

2010-02-25 09:50:30

WCF路由截獲消息

2010-02-23 14:17:20

WCF配置文件

2009-11-23 11:03:12

php_curl庫

2010-01-25 13:45:04

Android單選框

2010-02-23 09:44:12

WCF dataCon

2013-12-12 16:10:21

Lua腳本語言

2010-02-06 16:16:01

C++冒泡排序

2010-02-25 16:45:13

WCF應用技巧
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品1 | 久久久www成人免费无遮挡大片 | 人人做人人澡人人爽欧美 | 国产成人精品a视频 | 欧美精品网 | 亚洲欧美一区二区三区在线 | 国产在线中文字幕 | 一级黄色片一级黄色片 | 日韩综合 | 99久久免费精品视频 | 给我免费的视频在线观看 | 亚洲精品电影 | 99视频精品 | 国产日韩欧美一区二区 | 青青操av| 日韩在线综合 | 91av久久久 | 97久久国产| 欧洲一区二区三区 | 在线观看 亚洲 | 国产精品久久久久久久久免费樱桃 | 日本精品一区二区三区四区 | 久草视频在线播放 | 久久精品99国产精品 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 国产91丝袜在线播放 | 综合久久网 | 欧美日韩福利视频 | 日韩精品成人 | 欧美日韩手机在线观看 | 五月激情综合 | 亚洲欧美一区二区三区国产精品 | 免费a网 | 97国产一区二区 | 亚洲一区二区三区高清 | 在线观看www | 国产一区中文 | 玖玖玖在线 | 国产亚洲一区二区三区 | 国产日韩精品视频 | 国产精品日韩一区 |