自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WCF可信賴會話正確使用方法介紹

開發(fā) 開發(fā)工具
WCF可信賴會話主要可以幫助我們在安全方面提供一個更加安全的操作。在這篇文章中,我們將會為大家詳細介紹一些這方面的應用技巧。

WCF開發(fā)插件是一個功能非常強大的工具,可以幫助我們輕松的實現(xiàn)一些安全性較強的開發(fā)解決方案。在這里我們將會針對WCF可信賴會話的相關特點為大家詳細介紹一些WCF安全方面的知識。#t#

如果需要保證消息的傳輸正確性,以及傳輸?shù)南㈨樞?,在WCF中的實現(xiàn)非常容易,即使用可信賴會話ReliableSession,前提是我們應該選擇正確的綁定。支持可信賴會話的綁定包括WSHttpBinding,WSDualHttpBinding,WSFederationBinding以及NetTcpBinding和NetNamedPipesBinding(該綁定使用IPC協(xié)議,按照Juval Lowy的說法,該綁定的類名并不合理。綁定的類名通常根據(jù)協(xié)議命名,而不是根據(jù)它所采用的技術,例如NetTcpBinding而不是NetSocketBinding。因此IPC綁定應命名為NetIPCBinding,而不是NetNamedPipesBinding)。其中,與WS-*相關的綁定需要手動打開WCF可信賴會話。

由于綁定可以采用配置方式設定,因此,是否增加可信賴傳輸與具體的服務契約代碼無關。此外,綁定的選擇同樣可以通過配置文件修改,這就保證了WCF實現(xiàn)的靈活性。配置可信賴會話的方式如下所示:

  1. < wsHttpBinding> 
  2. < binding name="reliableBinding" receiveTimeout="00:20:00"> 
  3. < reliableSession enabled="true" ordered="true" 
    inactivityTimeout="00:20:00"/> 
  4. < /binding> 
  5. < /wsHttpBinding> 

在配置文件中,讓人疑惑不解的是兩個超時值的設置。兩者代表了不同的含義。receiveTimeout與應用程序消息相關,而inactivityTimeout則與應用程序以及基礎架構消息相關。舉例來說,如果一個服務契約包含了三個服務操作,且這三個操作將形成一個有序的序列(傳輸?shù)南㈨樞蚺c此相關),那么計算非活動狀態(tài)的值,對于前者而言是從調用服務對象的某一個操作之后開始計算,而后者則針對整個序列的操作。根據(jù)MSDN的解釋,基礎架構消息是指為了通道堆棧中的協(xié)議之一(例如,保持活動狀態(tài)或確認,而并非包含應用程序數(shù)據(jù))而生成的消息。

在WCF可信賴會話中,任何一個超時值計時器觸發(fā)都會斷開連接,因此單獨改變其中某一個的值是沒有意義的。如果值不相同,則取兩個值之間的最小值。他們的默認值均為10秒。

ReliableSession的Ordered屬性保證了消息的傳輸順序。它不意味著我們在調用服務對象時,必須遵循操作調用的順序,而是指消息在發(fā)送時,必須按照調用的順序傳送。例如一個服務契約定義了M1,M2,M3三個服務操作。如果服務對象的調用順序如下所示:

  1. m_proxy.M1();  
  2. m_proxy.M2();  
  3. m_proxy.M3(); 

則消息的順序為M1-> M2 -> M3。如果修改操作的調用順序如下:

  1. m_proxy.M3();  
  2. m_proxy.M2();  
  3. m_proxy.M1(); 

則消息的順序為M3-> M2 -> M1。因此,我們應注意它與所謂的“分步操作(Demarcating Operation)”的區(qū)別。分步操作通過在[OperationContract]中指定IsInitiating和IsTerminating的值,標示操作的調用順序。在DevX的一篇文章中有如下的服務契約定義:

 

  1. [ServiceContract]  
  2. public interface IChopstickBuilder  
  3. {  
  4. [OperationContract]  
  5. int GetChopsticksUnderConstruction();  
  6. [OperationContract]  
  7. void WarmupChopstickMachine();  
  8. [OperationContract]  
  9. void ConstructAChopstick();  

其中要求WarmupChopstickMachine()必須在ConstructAChopstick()操作之前調用。為保證客戶端調用不出現(xiàn)順序的錯誤,單單啟動WCF可信賴會話的有序傳遞仍嫌不足。此時,我們可以為WarmupChopstickMachine()操作定義分步操作:

  1. [OperationContract(IsInitiating = true)]  
  2. void WarmupChopstickMachine(); 

不過,這樣的操作定義實際上是無效的,因為IsInitiating的默認值本身就是true,這樣的設置與不設置的效果完全一致。因此,我們可以考慮對ConstructAChopstick()和GetChopsticksUnderConstruction()進行設置:

 

  1. [ServiceContract(SessionModeSessionMode = SessionMode.Required)]  
  2. public interface IChopstickBuilder  
  3. {  
  4. [OperationContract(IsInitiating = falseIsTerminating = true)]  
  5. int GetChopsticksUnderConstruction();  
  6. [OperationContract]  
  7. void WarmupChopstickMachine();  
  8. [OperationContract(IsInitiating = false)]  
  9. void ConstructAChopstick();  

使用分步操作需要會話的支持,因此需要在服務契約上將SessionMode設置為Required,否則會拋出InvalidOperationException異常。

對于某些嚴格要求WCF可信賴會話的服務,為避免配置文件中錯誤設置可信賴會話的可能,可以強制要求WCF檢查包含該服務契約的終結點,確認它是否選擇了支持可信賴會話的綁定,并支持有序傳遞:

 

  1. [ServiceContract(SessionModeSessionMode = SessionMode.Required)]  
  2. [DeliveryRequirements(RequireOrderedDelivery = true)]  
  3. public interface MyReliableService... 

以上就是我們?yōu)榇蠹以敿毥榻B的WCF可信賴會話的具體內容。

責任編輯:曹凱 來源: agiledon.com
相關推薦

2011-07-12 23:37:01

ITSS

2010-03-02 16:58:11

AJAX WCF服務項

2010-03-02 14:12:30

WCF枚舉類型

2015-04-27 18:53:21

H3Cloud/華三

2009-12-21 17:40:25

WCF會話

2010-03-01 17:39:07

WCF Address

2014-12-08 14:25:30

2018-08-03 17:03:00

商用軟件

2010-02-25 16:07:28

WCF REST

2010-02-23 17:05:38

2010-01-20 17:47:54

VB.NET注釋

2009-03-19 16:23:48

2015-04-29 18:34:19

阿里移動事業(yè)群UC高德地圖

2010-02-25 16:52:12

引用WCF服務

2009-11-09 10:59:57

WCF回調

2011-04-27 16:38:31

投影機
點贊
收藏

51CTO技術棧公眾號