綁定
服務之間的通信方式多種多樣,傳輸協(xié)議多種多樣,消息編碼格式多種多樣,消息安全保障策略多種多樣...等等這些如果組合起來,其數(shù)量非常之多,并且組合這些選項,有的彼此約束,有的互斥。對大多數(shù)應用程序而言,管理這么復雜的組合并無商業(yè)價值。然而,一旦做出錯誤的組合,就會影響系統(tǒng)的性能,質(zhì)量,造成嚴重的后果。
為了簡化這些選項,方便管理,WCF引入了綁定(binding),將這些通信特征組合在一起。
WCF定義了五種常用的綁定。
- 基本綁定
對應于BasicHttpBinding類。基本綁定使得服務看起來像是一個傳統(tǒng)的Web服務,能夠基于基本的Web服務信息進行通信。
- TCP綁定
對應于NetTcpBinding類。TCP綁定使用TCP協(xié)議實現(xiàn)在Intranet中跨機器的通信。
- IPC綁定
對應于NetNamedPipeBinding類。它使用命名管道為同意機器通信進行傳輸。
- Web服務綁定
對應于WSHttpBinding類。
- MSMQ綁定
對應于NetMsmqBinding類。
有三種使用綁定的方式:(1)如果滿足需要,可以直接使用內(nèi)置的綁定類型;
(2)重新配置綁定的屬性;
(3)編寫自定義綁定;
終結點(Endpoints)
服務與地址,綁定,契約有關。其中,地址定義了服務的位置,綁定定義了服務通信的方式,契約則定義了服務的內(nèi)容。所以,可以這樣理解,終結點就是地址,綁定,契約的混合體(ABC)。?
每一個終結點都包含了三個元素,而宿主則負責公開終結點。從邏輯上講,終結點相當于服務的接口。
每個服務至少公開一個業(yè)務終結點,每個終結點有且只能有一個服務契約。
Address
地址的三個典型功能(服務標識/定位,輔助尋址和服務身份標識)分別對應Uri,Headers和Identity三個只讀屬性。
?
元數(shù)據(jù)交換終結點
默認情況下,服務不會發(fā)布其元數(shù)據(jù),那么如何獲得元數(shù)據(jù)?
有兩種方式可以發(fā)布服務的元數(shù)據(jù):一是基于HTTP-GET協(xié)議提供元數(shù)據(jù),它是一種絕大多數(shù)平臺都能支持的簡單text-based協(xié)議;另一種是元數(shù)據(jù)交換終結點。
- 基于HTTP-GET協(xié)議
不發(fā)布元數(shù)據(jù),我們當然就用不了服務,使用HTTP-GET協(xié)議,那么基地址中必須有一個http協(xié)議的,假如有這么一種情況,需要用HTTP-GET協(xié)議發(fā)布服務的元數(shù)據(jù),但是通信卻使用TCP,那么至少有兩個基地址
以下App.config配置如下
<? xml version="1.0" encoding="utf-8" ?> < configuration > < system.serviceModel > < services > < service name ="WCFServer.MyService" behaviorConfiguration ="MEX" > < host > < baseAddresses > < add baseAddress ="net.tcp://localhost:5566/" /> < add baseAddress ="http://localhost:6655/" /> </ baseAddresses > </ host > < endpoint address ="HelloWorld" binding ="netTcpBinding" contract ="WCFServer.IMyService" /> <!-- <endpoint address="MEX" binding="mexTcpBinding" contract="IMetadataExchange"/> --> </ service > </ services > < behaviors > < serviceBehaviors > < behavior name ="MEX" > < serviceMetadata httpGetEnabled ="true" /> </ behavior > </ serviceBehaviors > </ behaviors > </ system.serviceModel > </ configuration >
- ?元數(shù)據(jù)交換終結點
基于HTTP-GET發(fā)布元數(shù)據(jù)僅僅是WCF的一個特性,它并不保證其他交互平臺也會支持。元數(shù)據(jù)發(fā)布具有標準形式,即元數(shù)據(jù)交換終結點,稱為MEX終結點。
既然是終結點,那么就有address,binding,contract,只不過contract是IMetadataExchange。下面配置為使用元數(shù)據(jù)交換終結點的配置
<? xml version="1.0" encoding="utf-8" ?> < configuration > < system.serviceModel > < services > < service name ="WCFServer.MyService" behaviorConfiguration ="MEX" > < host > < baseAddresses > < add baseAddress ="net.tcp://localhost:5566/" /> </ baseAddresses > </ host > < endpoint address ="HelloWorld" binding ="netTcpBinding" contract ="WCFServer.IMyService" /> < endpoint address ="MEX" binding ="mexTcpBinding" contract ="IMetadataExchange" /> </ service > </ services > < behaviors > < serviceBehaviors > < behavior name ="MEX" > < serviceMetadata /> </ behavior > </ serviceBehaviors > </ behaviors > </ system.serviceModel > </ configuration >
- ?標準終結點
WCF提供了幾個預定義的服務終結點,即標準終結點,配置如下
<? xml version="1.0" encoding="utf-8" ?> < configuration > < system.serviceModel > < services > < service name ="WCFServer.MyService" behaviorConfiguration ="MEX" > < host > < baseAddresses > < add baseAddress ="net.tcp://localhost:5566/" /> </ baseAddresses > </ host > < endpoint address ="HelloWorld" binding ="netTcpBinding" contract ="WCFServer.IMyService" /> < endpoint address ="MEX" binding ="mexTcpBinding" kind ="mexEndpoint" /> </ service > </ services > < behaviors > < serviceBehaviors > < behavior name ="MEX" > < serviceMetadata /> </ behavior > </ serviceBehaviors > </ behaviors > </ system.serviceModel > </ configuration >
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
