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