五分鐘了解WCF元數(shù)據(jù)交換
WCF還是比較常用的,于是我研究了一下WCF元數(shù)據(jù)交換,在這里拿出來和大家分享一下,希望對大家有用。知道了WCF服務(wù)元數(shù)據(jù)的概念后,我們就能理解為什么要暴露服務(wù)的元數(shù)據(jù)。WCF服務(wù)的元數(shù)據(jù)描述服務(wù)的核心信息,客戶端需要了解這些特征以便與該服務(wù)進(jìn)行通信。
#T#要想實(shí)現(xiàn)異構(gòu)平臺或者系統(tǒng)之間的通信,以前的技術(shù)是使用Web Service.因?yàn)槠渚哂凶悦枋?、可擴(kuò)展、與平臺無關(guān)等優(yōu)勢??蛻舳酥恍枰鶕?jù)Web Service地址,便可獲取服務(wù)的相關(guān)信息,反序列話本地的代碼,通過服務(wù)代理進(jìn)行服務(wù)的調(diào)用。
WCF服務(wù)主要特性之一就是跨平臺的服務(wù)交互。而暴露服務(wù)元數(shù)據(jù)的重要原因就是解決了異構(gòu)客戶端服務(wù)交互的關(guān)鍵問題。 元數(shù)據(jù)基于XML,自描述??蛻舳丝梢愿鶕?jù)服務(wù)的元數(shù)據(jù)反序列換生成本地代碼,無論是c#,vb還是java語。WCF服務(wù)有兩種方案可以發(fā)布自己的元數(shù)據(jù)。一種是基于HTTP-GET協(xié)議提供元數(shù)據(jù);另一種則為MEX終結(jié)點(diǎn)元數(shù)據(jù)交換方式,和WCF服務(wù)一樣使用一個專門的終結(jié)點(diǎn),稱為MEX元數(shù)據(jù)交換終結(jié)點(diǎn)。
- System.ServiceModel.Description命名空間里MetadataExchangeClientMode枚舉類型里進(jìn)行了定義
- using System;
- namespace System.ServiceModel.Description
- {
- // Summary:
- // Specifies the exchange mode used to obtain metadata.
- public enum MetadataExchangeClientMode
- {
- // Summary:
- // A WS-Transfer Get request is used.
- MetadataExchange = 0,
- //
- // Summary:
- // An HTTP GET request is used.
- HttpGet = 1,
- }
- }
WCF元數(shù)據(jù)交換終結(jié)點(diǎn)與其它終結(jié)點(diǎn)相似,包含自己的地址(Address)、綁定(通信協(xié)議Binding)、契約(服務(wù)、操作、數(shù)據(jù)Contract),但是使用的服務(wù)契約為WCF提供的接口IMetadataExchange。兩種發(fā)布元數(shù)據(jù)的方式使用了兩種不同的標(biāo)準(zhǔn)網(wǎng)絡(luò)傳輸協(xié)議,前者為 HTTP/GET請求,后者為WS-MetadataExchange(MEX:WCF支持的基本綁定HTTP、HTTPS、TCP、IPC等綁定協(xié)議)。啟用WCF元數(shù)據(jù)交換服務(wù)后,必須顯式配置元數(shù)據(jù)交換行為。