日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

WCF绑定细节(2)——绑定,绑定元素

發(fā)布時間:2025/3/13 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WCF绑定细节(2)——绑定,绑定元素 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

綁定這塊引出了很多細節(jié)。綁定解決了消息交換中的傳輸協議,傳輸,編碼等問題。如果要公開WCF服務,就要公開終結點EndpointWCF服務信息交換就是Endpoint之間的信息交換。終結點三大元素:ABCA解決尋址問題,C解決協定(契約)問題,這里可以設置服務的功能集,這是我們真正用到的地方,B綁定是重中之重,解決了其中最重要的一系列問題。

(一)系統提供了全面的綁定實現

系統提供了相當全面的綁定:

·BasicHttpBinding 適用于符合WS-basic profileweb服務通信。例如基于.netWS。傳輸協議Http,消息編碼:文本/xml。在配置文件里這個節(jié)點的名稱就是第一個單詞全小寫,后邊單詞首字母大寫。basicHttpBinding。其它的系統提供的綁定在配置文件中一般也按這個規(guī)則走。

·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、命名管道、HTTPHTTPSMSMQ、自定義

?

其中編碼層和傳輸層是必要條件。

這一層一層的綁定元素(Binding Element)就是BindingElement

(四)綁定元素

綁定元素在WCF實現上就是BindingElement

它做為其它綁定元素的基類。綁定元素用于為各種類型的信道生成信道工廠和信道監(jiān)聽器以處理傳出和傳入消息的綁定元素。(有的叫通道,也有叫信道的,指得是一個意思,但理解上有一些不同。)

由它派生的綁定元素實現:

OneWayBindingElement

TransportBindingElement

CompositeDuplexBindingElement

StreamUpgradeBindingElement

PrivacyNoticeBindingElement

UseManagedPresentationBindingElement

ReliableSessionBindingElement

SecurityBindingElement

MessageEncodingBindingElement

PeerResolverBindingElement

TransactionFlowBindingElement

ContextBindingElement

從字面上可以大概能夠看出每個元素的主要義務。

?

(五)綁定的綁定元素

這里看下幾種系統綁定是由哪幾個綁定元素組成的。

在綁定基類中Binding有個CreateBindingElements方法,

public abstract BindingElementCollection CreateBindingElements()

它的功能就是:創(chuàng)建一個集合,該集合包含屬于當前綁定的綁定元素,而由綁定基類實現的各個系統綁定都實現了這個方法。然后綁定元素(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

?

2WSDualHttpBinding綁定元素

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)——绑定,绑定元素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。