并發(fā)與實例化_第1頁
并發(fā)與實例化_第2頁
并發(fā)與實例化_第3頁
并發(fā)與實例化_第4頁
并發(fā)與實例化_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

并發(fā)與實例化jiangmy@會話實例化并發(fā)包含內(nèi)容:會話是在兩個終結點之間發(fā)送的所有消息的一種相互關系在服務協(xié)定上設置System.ServiceModel.ServiceContractAttribute.SessionMode的值Allowed:默認:客戶端可以進行連接,并選擇建立會話或不建立會話Required:所有調(diào)用都必須是同一個對話的一部分NotAllowed:禁止會話會話它們由應用程序顯示啟動和終止。會話期間傳遞的消息按照接收消息的順序進行處理。Session的創(chuàng)建和結束都有來自Client端的調(diào)用來實現(xiàn)basicHttpBinding不支持Session會話具有以下概念性功能:服務對象是服務類的實例。WCF實例管理就是指當WCF服務請求到達WCF服務端后,WCF宿主(ServiceHost)創(chuàng)建服務對象的方式:(1)是新建一個服務對象還是重用一個服務對象?(2)在什么情況下銷毀服務對象?WCF實例管理含義為了能同時響應多個WCF客戶端的請求,WCF服務端應用程序是多線程的,因此,WCF服務對象是運行在多線程環(huán)境下。WCF并發(fā)管理就是解決WCF服務對象在多線程環(huán)境下如何高效運行并避免由于線程推進順序不當造成“死鎖”或由于共享資源而引發(fā)“數(shù)據(jù)讀寫錯誤”的問題。并發(fā)當服務接收到請求時,會創(chuàng)建一個ServiceDescription對象來封裝服務的描述信息,然后,創(chuàng)建一個實現(xiàn)了服務契約的類的對象來響應請求。ServiceDescription對象表示一個完整的服務的內(nèi)存中說明,包括服務的所有終結點及其各自地址、綁定、協(xié)定和行為的規(guī)范。ServiceDescription對象行為:影響運行時操作的WCF類,技術上是通過行為來實現(xiàn)實例化和并發(fā)在WCF中,行為(behavior)是一組類,可以用亍控制WCF基礎架構中的各種組成要素。行為可以以代碼屬性的形式直接定義在代碼中(編譯后成為類型元數(shù)據(jù)),也可以放到系統(tǒng)配置文件(app.config或web.config)里。當客戶端使用ChannelFactory<>創(chuàng)建代理,服務端ServiceHost創(chuàng)建服務對象時,都會從系統(tǒng)配置文件或程序集元數(shù)據(jù)中加載行為,并將其插入到適當?shù)膶ο笾小J裁词切袨??APP.config中的行為[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,ConcurrencyMode=ConcurrencyMode.Single)]

publicclassMyWCFService:IMyWCFService{//……}編譯之后,服務行為將會保存到程序集的元數(shù)據(jù)中,并且與服務對象的類型(MyWCFService)關聯(lián)起來。代碼中的“服務行為”如果把服務對象看成是學生,那么,“行為”可以看成是“學生守則”,“學生守則”規(guī)定了學生該做什么和不該做什么。理解“行為”根據(jù)“管理對象”的不同,WCF中主要有四種“行為”:1.Servicebehaviors:管理服務對象2.Endpointbehaviors:管理終結點3.Operationbehaviors:定義操作的特性4.callbackbehaviors:用于實現(xiàn)回調(diào)確定WCF并發(fā)與實例訪問特性的是一種“服務端行為(Servicebehavior)”行為的種類可以從每個服務都擁有的ServiceDescription對象的Behaviors屬性中了解此服務擁有哪些行為。例題Concurrency中ServiceDescription重要屬性當有多個WCF請求到達服務端時,ServiceHost對象到底應該創(chuàng)建多少個服務對象,這就是實例化(instancing)對象的問題。WCF中兩個控制并發(fā)的行為:ServiceBehaviorAttribute.InstanceContextMode用于定義實例化模式。ServiceBehaviorAttribute.ConcurrencyMode用于控制服務實例內(nèi)的線程并發(fā)。WCF實例管理行為PerCall:服務端為每一次的客戶調(diào)用創(chuàng)建一個新的服務對象)instanceContext。(一次方法調(diào)用)PerSession:服務端為每一個客戶代理創(chuàng)建一個服務對象)instanceContext。(如果要使用PerSession,必須在契約級別打開會話SessionMode=Requried,在服務級別設置nstanceContextMode=PerSession)Single:僅有一個對象為所有的客戶調(diào)用服務)instanceContext高度注意:客戶調(diào)用是指一次方法調(diào)用,而客戶代理是指客戶端創(chuàng)建的用于進程調(diào)用WCF服務的代理對象!InstanceContextMode枚舉單調(diào)模式:每次都會創(chuàng)建一個新的對象。步驟如下:客戶端創(chuàng)建代理對象(Proxy客戶端調(diào)用代理對象的一個契約操作,代理對象將其傳遞給服務宿主程序。宿主應用程序創(chuàng)建一新的服務契約對象,并且執(zhí)行請求操作在執(zhí)行完請求操作后,如果要求有應答,那么服務契約會給代理對象一個應答,然后銷毀自己。PerCallPerSession模式工作的流程如下:客戶端創(chuàng)建代理對象(Proxy)客戶端第一次調(diào)用代理對象的一個契約操作,代理對象將其調(diào)用請求傳遞給服務宿主宿主程序創(chuàng)建新的服務對象,并執(zhí)行請求操作,如果有必要,返回客戶端應答客戶端再次發(fā)出調(diào)用操作的請求,宿主會先判斷是否已有建立好的會話,如果存在,則不需要再創(chuàng)建新的服務對象,直接使用老對象即可。在時間達到指定要求或者因一些特殊原因,會話會過期,此時服務對象銷毀。PerSessionSingle模式工作流程如下:服務端啟動,同時創(chuàng)建服務對象客戶端通過代理調(diào)用契約操作第一步中創(chuàng)建的服務對象接受請求,并執(zhí)行操作,進行必要的應答第一步創(chuàng)建的服務對象將一直保留服務關閉,第一步創(chuàng)建的對象銷毀Single單調(diào)模式:類似快餐式的經(jīng)營方式,當一個請求操作來到的時候,再創(chuàng)建服務對象,申請必要資源,而當操作完畢之后,立即銷毀對象并釋放資源。大大提高服務端的吞吐能力。而且WCF中默認的實例創(chuàng)建模式就是這種。PerSession:與傳統(tǒng)的C/S模式應用程序非常相似。能在服務端和客戶端維護狀態(tài),當一個服務對象創(chuàng)建之后不會馬上銷毀,而是等待客戶端再次來消費它,壞處:可能會浪費寶貴的服務資源。優(yōu)點:能夠保持連接和維護狀態(tài)。應用場景:服務端操作不需要比較多的資源或者占用的資源也不寶貴的情況下,而卻與客戶端在不同的網(wǎng)絡中。比較:當WCF服務對象創(chuàng)建以后,每個客戶端發(fā)送過來請求如果不能實時響應,會將其放入請求隊列中。WCF請求一般會在不同的線程中響應,因此,必須注意執(zhí)行順序,才不會出錯。可以把WCF服務對象比作是一個火車票售票員,客戶端請求則是要買票回家過節(jié)的旅客,很明顯,“排在隊前面的先買”就是維護正常購票秩序的一個基本原則,否則,大家一哄而上,就亂套了?!芭旁陉犌懊娴南荣I”就是一個“行為”。在實際開發(fā)中,我們使用ServiceBehaviorAttribute.ConcurrencyMode來確定這個WCF服務對象的服務規(guī)則。WCF并發(fā)管理行為Single:服務對象是單線程的,一次叧為一個“客人”服務(每個instanceContext一次只能有一個處理消息的線程)。Multiple:服務實例是多線程的,即同時為多個“客人”服務。無任何線程同步措施。Reentrant:服務對象是單線程的,一次叧為一個“客人”服務。但中途可以換“客人”,比如“前一客人”上廁所了,服務員可以接著服務下一位客人,等“前一客人”回來了,再繼續(xù)為他服務。注意:Reentrant模式主要用亍服務端應用程序“回調(diào)”客戶端應用程序的場景中。ConcurrencyMode枚舉默認設置(即不明確指定值)下,WCF服務InstanceContextMode值為PerSession,ConcurrencyMode值為Single。WCF習題中session累加例題p144雖然兩次調(diào)用Add方法進行累加,但是最終的結果依然是0。這好像和WCF默認的Session支持不相符,默認的Session支持是這樣:ServiceInstance和Proxy綁定在一起,當調(diào)用Proxy的任何一個方法的時候Session開始,從此Session將會和Proxy具有一樣的生命周期,一個proxy對應一個session。必須使用支持

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論