WCF绑定细节(2)——绑定,绑定元素
綁定這塊引出了很多細節。綁定解決了消息交換中的傳輸協議,傳輸,編碼等問題。如果要公開WCF服務,就要公開終結點Endpoint,WCF服務信息交換就是Endpoint之間的信息交換。終結點三大元素:ABC。A解決尋址問題,C解決協定(契約)問題,這里可以設置服務的功能集,這是我們真正用到的地方,B綁定是重中之重,解決了其中最重要的一系列問題。
(一)系統提供了全面的綁定實現
系統提供了相當全面的綁定:
·BasicHttpBinding 適用于符合WS-basic profile的web服務通信。例如基于.net的WS。傳輸協議Http,消息編碼:文本/xml。在配置文件里這個節點的名稱就是第一個單詞全小寫,后邊單詞首字母大寫。basicHttpBinding。其它的系統提供的綁定在配置文件中一般也按這個規則走。
·WSHttpBinding 非雙工的。
·WSDualHttpBinding 雙工的
·NetTcpBinding 跨計算機通信
·NetNamedPipeBinding 計算機內通信
·NetMsmqBinding 消息隊列
其它的省略。這里有幾個詳細的表(這幾個表太好):
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs
/wcf_con/html/2c243746-45ce-4588-995e-c17126a579a6.htm
?
(二)綁定基類
綁定在WCF實現上就是上邊這些綁定,對應著各自的類。它們都由Binding類派生:
public class BasicHttpBinding : Binding, IBindingRuntimePreferences
?
Binding類
public abstract class Binding : IDefaultCommunicationTimeouts
Binding類實現了IdefaultCommunicationTimeouts接口,這個接口用于定義通信的超時屬性。它有4個屬性:
?
·CloseTimeout? 獲取 close 方法(由通信對象調用)在超時之前的時間間隔。
·OpenTimeout? 獲取 open 方法(由通信對象調用)在超時之前的時間間隔。
·ReceiveTimeout? 獲取 receive 方法(由通信對象調用)在超時之前的時間間隔。
·SendTimeout? 獲取 send 方法(由通信對象調用)在超時之前的時間間隔。
?
(三)綁定是分層的
一個綁定對象對應著一組有序的集合,一組綁定元素對象的集合,而這些元素按層來分別處理各自的事務。因為WCF服務是基于消息交換,而這種交換是在終結點之間進行的,所以每個元素負責終結點通信的一個方面。例如:編碼,傳輸,安全等等。
它的層:
| 層 | 選項 | 是否必需 |
| 事務流 | TransactionFlowBindingElement | 否 |
| 可靠性 | ReliableSessionBindingElement | 否 |
| 安全性 | 對稱、非對稱、傳輸級 | 否 |
| 形狀更改 | CompositeDuplexBindingElement | 否 |
| 傳輸升級 | SSL 流、Windows 流、對等解析程序 | 否 |
| 編碼 | 文本、二進制、MTOM、自定義 | 是 |
| 傳輸 | TCP、命名管道、HTTP、HTTPS、MSMQ、自定義 | 是 |
?
其中編碼層和傳輸層是必要條件。
這一層一層的綁定元素(Binding Element)就是BindingElement
(四)綁定元素
綁定元素在WCF實現上就是BindingElement
它做為其它綁定元素的基類。綁定元素用于為各種類型的信道生成信道工廠和信道監聽器以處理傳出和傳入消息的綁定元素。(有的叫通道,也有叫信道的,指得是一個意思,但理解上有一些不同。)
由它派生的綁定元素實現:
OneWayBindingElement
TransportBindingElement
CompositeDuplexBindingElement
StreamUpgradeBindingElement
PrivacyNoticeBindingElement
UseManagedPresentationBindingElement
ReliableSessionBindingElement
SecurityBindingElement
MessageEncodingBindingElement
PeerResolverBindingElement
TransactionFlowBindingElement
ContextBindingElement
從字面上可以大概能夠看出每個元素的主要義務。
?
(五)綁定的綁定元素
這里看下幾種系統綁定是由哪幾個綁定元素組成的。
在綁定基類中Binding有個CreateBindingElements方法,
public abstract BindingElementCollection CreateBindingElements()
它的功能就是:創建一個集合,該集合包含屬于當前綁定的綁定元素,而由綁定基類實現的各個系統綁定都實現了這個方法。然后綁定元素(BindingElement)有個GetType方法,用于獲取綁定元素實例(Type),然后就可以通過類型屬性來得到詳細信息了。
(1)現在看看BasicHttpBinding綁定包含哪些綁定元素:
public void TestBasicHttpBindingElements()
{
??? BasicHttpBinding _binding=new BasicHttpBinding();
BindingElementCollection _list =
_binding.CreateBindingElements();
?
??? foreach (BindingElement ele in _list)
??? {
Console.WriteLine(ele.GetType().FullName);
??? }
}
結果:
System.ServiceModel.Channels.TextMessageEncodingBindingElement
System.ServiceModel.Channels.HttpTransportBindingElement
?
它由2層組成。從字面上可以大概推斷出一層用于消息編碼,一層用于傳輸。綁定是分層的,最低要有兩層:傳輸層與編碼層。
·TextMessageEncodingBindingElement這個綁定元素的結構為:
BindingElement
MessageEncodingBindingElement
TextMessageEncodingBindingElement
?
它的定義為:
public sealed class TextMessageEncodingBindingElement
: MessageEncodingBindingElement,
IWsdlExportExtension, IPolicyExportExtension
·HttpTransportBindingElement這個綁定元素的結構為:
BindingElement
TransportBindingElement
HttpTransportBindingElement
?
它的定義為:
public class HttpTransportBindingElement
: TransportBindingElement,
IWsdlExportExtension, IPolicyExportExtension
?
(2)WSDualHttpBinding綁定元素
public void TestWSDuplexHttpBindingElements()
{
??? WSDualHttpBinding _binding = new WSDualHttpBinding();
BindingElementCollection _list =
_binding.CreateBindingElements();
?
??? foreach (BindingElement ele in _list)
??? {
Console.WriteLine(ele.GetType().FullName);
??? }
}
?
結果:
System.ServiceModel.Channels.TransactionFlowBindingElement
System.ServiceModel.Channels.ReliableSessionBindingElement
System.ServiceModel.Channels.SymmetricSecurityBindingElement
System.ServiceModel.Channels.CompositeDuplexBindingElement
System.ServiceModel.Channels.OneWayBindingElement
System.ServiceModel.Channels.TextMessageEncodingBindingElement
System.ServiceModel.Channels.HttpTransportBindingElement
?
?
?
轉載于:https://www.cnblogs.com/jams742003/archive/2010/03/18/1688700.html
總結
以上是生活随笔為你收集整理的WCF绑定细节(2)——绑定,绑定元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eWeek: 三巨头Web应用服务对比
- 下一篇: 怎么样处理好学科竞赛与文化课学习之间的关