WCF隨筆3 訊息編碼器

2021-09-07 00:26:27 字數 2836 閱讀 6569

原文:

wcf隨筆3----訊息編碼器

我們都知道,message是wcf通訊框架進行通訊的最基本的單位,但是wcf開發人員其實根本不需要直接與message打交道,一樣能夠寫好wcf相關的程式.這是因為整個框架都為我們做好了一切,當客戶端建立了連線服務端的通道之後,通過客戶端的**想服務端傳送訊息的時候,wcf基礎結構就開始忙著在背後建立,傳送,接受處理message物件的工作.傳送訊息的時候其實是要經歷過幾次轉換的,從傳送者角度來看包括:序列化和編碼,序列化是把message物件轉換為xml資料,編碼是將xml資料轉換為特定的資料格式,比如常見的二進位制格式.從服務端的角度看正好相反所以,從今天晚上開始進入message物件的學習.

在訊息的序列化和編碼的過程有兩個重要的型別 xmldictionaryreader,xmldictionarywriter,乙個是讀,另乙個是寫.先來說下xmldictionarywriter,它是用來序列化和編碼message型別的,使用時,首先要建立xmldictionarywriter物件,我們在建立物件的時候一般是呼叫xmldictionarywriter中的靜態函式,createtextwriter(),createbinarywriter(),createdictionarywriter(),createmtomwriter(),這個四個方法都會返回乙個xmldictionarywriter物件,每個方法都有過載,至於每個方法引數是什麼意思,呵呵,額也不是都知道,具體用的時候還是要去查msdn的..所以大家想進一步了解的話,還是自己查下吧...*_*,前面兩個靜態函式應該說使我們比較常用的.第乙個的作用是為了產生基於文字編碼的xml.第二個的作用是了產生基於二進位制編碼的xml.主要介紹這兩個.剛剛說了,xmldictionarywriter是負責編碼,將message編碼成指定格式的xml資料,那麼經過編碼之後的資料就可以傳送到服務端了,這個時候就要用到xmldictionaryreader這個物件來對經過編碼的資料進行解析了.它的使用基本上和xmldictionarywriter物件的用法一樣,也是通過靜態函式返回物件,針對四種不同的編碼模式,它也有四種不同解析器.createtextreader(),createbinaryreader(),createdictionaryreader(),createmtomreader(),只要根據客戶端的編碼規則,選擇相應的解碼器就可以了.先上**:

class

program

//文字編碼

public

static

memorystream textwriter()

console.writeline(

"xmldictionarywriter has wrote bytes

", _stream.position);

byte _b =_stream.toarray();

_stream.position = 0

; console.writeline(

"二進位制內容:

", bitconverter.tostring(_b));

"轉換成字串:\n", new streamreader(_stream).readtoend());

xmldictionaryreader xmlreader = xmldictionaryreader.createtextreader(_stream, new

xmldictionaryreaderquotas());

xmlreader.movetocontent();

console.writeline(

"轉換成字串:\n

", xmlreader.readouterxml());

return

_stream;

}//二進位制編碼

public

static

memorystream binarywriter()

console.writeline(

"xmldictionarywriter has wrote bytes

", _stream.position);

byte _b =_stream.toarray();

_stream.position = 0

; console.writeline(

"二進位制內容:

", bitconverter.tostring(_b));

//建立xmldictionaryreader物件,將剛剛用二進位制編碼器進行編碼的之後的資料讀成字串

xmldictionaryreader xmlreader = xmldictionaryreader.createbinaryreader(_b, new

xmldictionaryreaderquotas());

xmlreader.read();

console.writeline(

"轉換成字串:\n

",xmlreader.readouterxml());

return

_stream;}}

執行結果:

在上面兩種編碼的模式中,我都使用了

xmldictionaryreader這個物件,其實基於文字編碼的xml資料,是可以直接用流讀出來的,上面的**我已經注釋掉了,感興趣的朋友可以試下,一樣可以將資料都出來.

從上面的執行結果中我們可以看到二進位制編碼的模式比文字模式的效率要高,同樣的資料,乙個是22位元組,另乙個是77位元組...嘿嘿,從效能上來看是可以考慮採用二進位制編碼器了

以上就是全部內容,寫得比較粗糙~見諒哈...還是那句話,只是為了mark自己學習的點點滴滴``

index編碼器 編碼器測量工具 主軸編碼器

德國vs sensorik編碼器為index車銑復合工具機標配編碼器 並可完全相容西門子 l b 海德漢等編碼器。dcmu 24p cnbo box 應用於工具機主軸編碼器訊號診斷 資料記錄及訊號校準的測量工具 僅使用一台膝上型電腦連線我們的編碼器測量工具裝置 dcmu box 就可以輕鬆對編碼器訊...

連線編碼器 編碼器原理及測量

編碼器及其應用概述 編碼器 encoder 是將訊號 如位元流 或資料進行編制 轉換為可用以通訊 傳輸和儲存的訊號形式的裝置。編碼器把角位移或直線位移轉換成電訊號,前者成為碼盤,後者稱碼尺。按照讀出方式編碼器可以分為接觸式和非接觸式兩種。接觸式採用電刷輸出,一電刷接觸導電區或絕緣區來表示 的狀態是 ...

正交編碼器

正交編碼器通過兩個脈衝訊號進行位置測量。該訊號可稱為訊號a 通道a 和訊號b 通道b 訊號a和訊號b的偏移量為90 用於確定編碼器移動的方向。例如,在角度正交編碼器中,如訊號a位於訊號b之前,則編碼器按順時針方向旋轉。反之,編碼器按逆時針方向旋轉。m系列 c系列和ni tio裝置上的計數器支援對x1...