WCF学习笔记之可靠会话
生活随笔
收集整理的這篇文章主要介紹了
WCF学习笔记之可靠会话
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
可靠會話傳輸需要解決兩個問題:重復消息和無序交付;制定WS-RM的一個主要目的就是實現一種模塊化?的可靠消息傳輸機制;WS-RM兩個版本(WS-RM1.0和WS-RM1.1);
WCF中整個可靠會話的實現完全是通過ReliableSessionBindingElement這個綁定元素創建的信道實現的;
- AcknowledgementInterval:如果消息的發送方和接收方通過雙工通道連接,接收方能夠隨時向接收方發送確認。在這種情況下,為了降低網絡流量,WCF采用批量確認的機制。也就是說,當接收端成功接收到某個消息的時候,并不會立即針對該消息發送確認,而是等待一定時間后,對所有接收到的消息進行批量確認。AcknowledgementInterval表示消息接收端發送確認之前等待的時間間隔,默認為0.2秒(200毫秒)。該設置僅僅針對于NetTcpBingding和WSDualHttpBiding等支持雙工通信的綁定有效,而像BasicHttpBinding和WSHttpBiding這樣的綁定無此設置。
- FlowControlEnabled:該屬性指示可靠會話是否已啟用流控制(Flow Control)。流控制是可靠會話實現的一種機制,目的是確保發送方所發送的消息數不超過接收方可處理的消息數。接收方擁有消息緩沖區,用于容納突增的消息和無序的消息。接收方在每次確認時都會告知發送方此緩沖區中的剩余空間量。利用此信息,發送方就可以在接收方緩沖區中沒有剩余空間時,停止發送新的消息。FlowControlEnabled默認值為True。
- InactivityTimeout:在WS-RM中,被創建的RM序列具有一個Expires屬性表示序列的生命周期。但是,我們不能通過可靠會話的整個生命周期的時限,也就是,整個可靠會話并沒有具體時間的限制。但是,WCF并不能依賴于可靠會話被顯式地被終止,而設定一個超時時限,在該時間范圍內如何沒有活動的消息交換,WCF會將可靠會話關閉。InactivityTimeout就是這么一個表示可靠會話在關閉之前保持非活動狀態的時間間隔,默認值為10分鐘。
- MaxPendingChannels:通道在等待被接受時處于掛起狀態。一旦達到該限制,就不會創建任何通 道并將其置于掛起模式,直到此數值降低(通過接受掛起的通道)。這是對每個偵聽器的限制。當達到此閾值時如果遠程應用程序嘗試建立新的可靠會話,則會拒絕請求且打開操作將提示此錯誤。這么一個可靠會話期間可為掛起狀態的最大通道數通過MaxPendingChannels表示,默認值為4;
- MaxRetryCount:如果在某個可接受時間范圍內,消息的發送端沒有接收到某個以發消息的確認,會對該消息進行重傳。MaxRetryCount表示重傳的次數,最小值為1,最大值為0x7FFFFFFF(Int32.MaxValue)的默認值為8。WCF使用指數補償算法根據計算的平均往返時間來確定何時重新傳輸。初始重試時間是根據測量的創建會話往返時間來計算的。重新傳輸算法是每進行一次嘗試,延遲時間就會增加一倍。如此一來,從第一次傳輸嘗試到最后一次傳輸嘗試大約會歷時 8.5 分鐘。可以根據計算的往返時間來調整第一次嘗試重新傳輸的時間,因此這些嘗試所經歷的時間將會相應地發生變化。這樣,可以使重新傳輸時間動態地適應不斷變化的網絡條件。MaxRetryCount表示進行重傳的次數,在達到此限制之前未接收到確認被視為嚴重的通信故障,這種情況將引發通道出錯的事件。
- MaxTransferWindowSize:該屬性表示消息緩沖區的大小,或者說是緩沖區能夠容納消息的數量。MaxTransferWindowSize最小值為1,最大值為4096,默認值為32。MaxTransferWindowSize屬性的值可在發送方和接收方進行設置。如果達到發送方的這個限制,則會阻止其他發送調用。如果達到接收方的這個限制,則不會接受到達基礎通道的新消息。可靠會話會使用窗口 協議來幫助提高網絡利用率。所需的緩沖量直接從傳輸窗口的大小派生而來。調整此值時請注意,最佳傳輸窗口直接與帶寬和延遲相關。理想的最大窗口大小是帶寬乘以延遲。如果比此值小,網絡利用率就會低于 100%,如果比此值大,就會浪費空間。
- Ordered:該屬性表示是否啟用“有序傳輸”機制確保消息的接收端完全按照消息被發送的順序進行交付;默認值為False;
- ReliableMessagingVersion:該屬性表示可靠會話支持的WS-RM的版本。在WCF中,該WS-RM通過ReliableMessagingVersion類型表示(不是枚舉)。ReliableMessagingVersion定義如下,我們可以通過兩個靜態只讀屬性WSReliableMessagingFebruary2005和WSReliableMessaging11得到兩個表示WS-RM 1.0和WS-RM 1.1的ReliableMessagingVersion對象。靜態只讀屬性Default表示默認的WS-RM版本,其值目前和WSReliableMessagingFebruary2005屬性一致。
?
除了InactivityTimeout和Ordered兩個屬性可以進行設置之外,定義在ReliableSessionBindingElement綁定元素中的各個屬性大多采用默認值。但是,有一個例外,即表示支持WS-RM版本的ReliableMessagingVersion屬性。對于WSHttpBinding、WSDualHttpBinding和WSFederationHttpBinding支持的版本是WS-RM 1.0,而WS2007HttpBinding和WS2007FederationHttpBinding則支持的是WS-RM 1.1。
配置綁定設置:
<system.serviceModel><bindings><ws2007HttpBinding><binding name="reliableSession2007Binding"><reliableSession enabled="True" inactivityTimeout="00:20:00" ordered="True"/><security mode="None"/></binding></ws2007HttpBinding></bindings><client ><endpoint name="calculatorservice" address="http://127.0.0.1/calculatorservice" binding="ws2007HttpBinding" bindingConfiguration="reliableSession2007Binding" contract="Artech.MessageInspection.Sender.ICalculator" /></client> </system.serviceModel>?
總結
以上是生活随笔為你收集整理的WCF学习笔记之可靠会话的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过实验取证:TCP三次握手的过程
- 下一篇: PXE大批量安装Linux系统