WCF單向操作不同于異步操作
WCF有一種比較基礎的應用機制,就是“請求-應答操作”。那么,今天我們將會針對這一機制中的WCF單向操作進行一個詳細的介紹,希望大家可以通過這里介紹的內容能夠充分的掌握群毆這方面的內容。
WCF單向操作沒有返回值。單向操作不同于異步操作,雖然單向操作只是在發出調用的瞬間阻塞客戶端,但如果發出多個單向調用,WCF會將這些調用放入隊列。隊列存儲調用的個數是有限的,一旦發出的調用個數超出了隊列存儲調用的設置值,則會發生阻塞現象,因為調用無法放入隊列。當隊列的請求出列后,產生阻塞的調用就會放入隊列,并解除對客戶端的阻塞。
設置單向操作的方法是利用OperationContract特性的IsOneWay屬性,例如:
- [ServiceContract]
- interface IMyContract
- {
- [OperationContract(IsOneWay = true)]
- void MyMethod( );
- }
被設置為WCF單向操作的方法不能包含返回值,即它的返回值只能為void,否則會拋出InvalidOperationException異常。 #t#
在會話契約中雖然允許定義單向操作,但由于單向操作無法正確地維持狀態,因而,單向操作的***適用場景是在單調服務或單例服務中。“如果在會話契約中定義了單向操作,就必須保證單向操作是終止會話的***一個操作(該操作必須遵循單向操作的規定,例如返回void類型值)。這可以通過分步操作來實現。”
單向操作如果拋出異常,則視其服務模型以及使用綁定的不同,會產生不同的結果。以下內容假定服務不會拋出FaultException異常或者它的子類。
綁定WCF單向操作
BasicHttpBinding綁定,客戶端不受影響 ;
不包含可靠消息傳輸與安全的WSHttpBinding綁定,客戶端不受影響;
具有安全性的WSHttpBinding綁定 通道錯誤, 客戶端無法繼續發出調用 ;
不包含可靠消息傳輸的NetTcpBinding或NetNamedPipeBinding綁定,通道錯誤,客戶端無法繼續發出調用;
具有可靠消息傳輸的WSHttpBinding綁定或NetTcpBinding綁定,客戶端不受影響。
如果是在會話服務中,則單向操作拋出的異常都會影響到客戶端,只不過如果使用的綁定不相同,則拋出的異常會有所區別。
對于WCF單向操作而言,無會話的單例服務與單調服務相似,具有會話的單例服務則與會話服務相似。