成人免费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-25 09:50:30

WCF路由截獲消息

2010-02-22 17:21:02

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技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区久久久久久久久 | a级免费视频 | 久久免费视频网 | 国产在线www | 香蕉久久久| 欧美久久精品一级黑人c片 91免费在线视频 | 久久综合av | 国产高清毛片 | 亚洲乱码国产乱码精品精的特点 | 亚洲一级黄色 | 国产精品久久久久一区二区 | 一区二区三区av | 日韩中文字幕一区二区 | 天堂一区二区三区 | 在线免费观看a级片 | 成人一区二区三区 | 日韩伦理一区二区三区 | 免费黄色的视频 | 天天操天天摸天天干 | 欧美不卡 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 高清国产午夜精品久久久久久 | 99久久精品国产麻豆演员表 | 在线成人免费视频 | 国产精品一二区 | 亚洲精品视频免费 | 免费观看一级特黄欧美大片 | 久久久久久久一区二区 | 日韩有码在线播放 | 国产成人在线一区 | 高清黄色毛片 | 日韩欧美不卡 | 日韩精品一区二区三区久久 | 一级高清视频 | 色欧美日韩| 播放一级黄色片 | 日本超碰 | 青青草视频网 | 中文字幕不卡在线观看 | 久久国产精品99久久久久 | 国产精品不卡一区 |