




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
WCF分布式開發(fā)步步為贏(15):錯(cuò)誤契約(FaultContract)與特別處理(ExceptionHandle)所屬分類:WCF分布式開發(fā)步步為贏,SOAandEAI15WCF分布式開發(fā)步步為贏(15):錯(cuò)誤契約(FaultContract)與特別處理(ExceptionHandle)所屬分類:WCF分布式開發(fā)步步為贏,SOAandEAI處理擴(kuò)展【5】例如代碼分析,最終是【6】總結(jié)局部。ExceptionHandleJAVA平臺也有WCFWCF的特別處理,我們有必要先來了解其前身.NET的特別處理相關(guān)的概念。.NET特別處理:.NETFrameworkWin32構(gòu)造化特別處理機(jī)制實(shí)現(xiàn)的。公共語言運(yùn)行庫供給了一個(gè)模型,以統(tǒng)一的方式通知程序發(fā)生的錯(cuò)誤,這樣為設(shè)計(jì)容錯(cuò)軟件供給了極大的幫助。全部操作都通過引發(fā)特別來指示消滅錯(cuò)誤。傳統(tǒng)上,語言的錯(cuò)誤處理模型依靠于語言檢理具有以下特點(diǎn):處理特別時(shí)不用考慮生成特別的語言或處理特別的語言。允許跨進(jìn)程甚至跨計(jì)算機(jī)邊界引發(fā)特別。與其他錯(cuò)誤通知方法〔如返回代碼〕相比,特別具有假設(shè)干優(yōu)點(diǎn)。不再有消滅錯(cuò)誤而不被人留意的狀況WindowsC++錯(cuò)誤處理更快。非托管代碼可以同時(shí)包含C++樣式的 SEH COM的HRESULT。try、catchfinally關(guān)鍵字嘗試某些操作,以處理失敗狀況,盡管這些操作有可能失敗,但假設(shè)您確定需要這樣做,且期望在事后清理資源,就可以嘗試這樣做。公共語言運(yùn)行時(shí)(CLR)、.NETFrameworkthrow關(guān)】WCF特別處理:WCF.NET的特別處理機(jī)制。WCF也是.NETWCF并不支持.NETWCF則不會?!縒CF錯(cuò)誤類型:WCF分布式應(yīng)用開發(fā)的過程中,我們客戶端常常會遇到一下三種常見的錯(cuò)誤。CommunicationException;Fault,等問題,這個(gè)比較常見。一般通道閑置時(shí)State來推斷。安全驗(yàn)證失敗也會導(dǎo)致這個(gè)錯(cuò)誤。。第三種是我們本節(jié)要具體表達(dá)的類型?!?.2】FaultException:序列化,也就不能在客戶端和效勞端實(shí)現(xiàn)共享錯(cuò)誤信息。WCF效勞中承受傳統(tǒng)的方式處理特別,由于特別消息不能被序列化,因而客戶端無法捕獲WCFFaultException。這個(gè)是一個(gè)基于行業(yè)標(biāo)準(zhǔn)的特別對象,因此,可以把錯(cuò)誤信[Serializable,KnownType(typeof(FaultReasonData[])),KnownType(typeof(FaultCodeData)),KnownType(typeof(FaultCodeData[])),[Serializable,KnownType(typeof(FaultReasonData[])),KnownType(typeof(FaultCodeData)),KnownType(typeof(FaultCodeData[])),KnownType(typeof(FaultReasonData))]publicclassFaultException:CommunicationException{//Fieldsprivatestringaction;privateFaultCodecode;privateMessageFaultfault;internalconststringNamespace=“:///Mic““:///Microsoft/WindowsCommunicationFoundation/2005/08/Faults/“;privateFaultReasonreason;//MethodspublicFaultException;}Serializable.Code這里我們可以使用任何系統(tǒng)類型或者自定義類型來傳遞錯(cuò)誤信息,T代表要傳遞的錯(cuò)誤細(xì)節(jié)。此類也可以使用反射器查看代碼:Code的特別處理,這里就必需介紹一下一個(gè)重要的概念:錯(cuò)誤契約〔FaultContract〕。FaultContract。FaultException類型傳遞到客戶端。[AttributeUsage(AttributeTargets.Method,AllowMultiple=true,Inherited=false)]public[AttributeUsage(AttributeTargets.Method,AllowMultiple=true,Inherited=false)]publicsealedclassFaultContractAttribute:Attribute{//Fieldsprivatestringaction;privateboolhasProtectionLevel;privatestringname;.}大契約中的一種〔Service).聲明一個(gè)效勞操作契約方法為FaultException<T>的類型全都。】WCF特別處理擴(kuò)展:接口:的定義如下:publicpublicinterfaceIErrorHandler{//MethodsboolHandleError(Exceptionerror);voidProvideFault(Exceptionerror,MessageVersionversion,refMessagefault);}方法后再返回給客戶端。ProvideFault不考慮特別的類型。FaultExceptino<log日志。IErrorHandle,需要將它添加到對應(yīng)的分發(fā)器里即可。接口IServiceBehavior的主要方法ApplyDispatchBehavior:publicpublicinterfaceIServiceBehavior{//MethodsvoidAddBindingParameters(ServiceDescriptionserviceDescription,ServiceHostBaseserviceHostBase,Collection<ServiceEndpoint>endpoints,BindingParameterCollectionbindingParameters);voidApplyDispatchBehavior(ServiceDescriptionserviceDescription,ServiceHostBaseserviceHostBase);voidValidate(ServiceDescriptionserviceDescription,ServiceHostBaseserviceHostBase);}【5】例如代碼分析:下面我們給出本節(jié)文章的簡潔例如代碼?!?.1】效勞端:WCF的特別處理,SayHelloSayGoodBye。OverflowException內(nèi)存溢出的特別,F(xiàn)aultContract特性。定義代碼如下://1.效勞契約[ServiceContract(Namespace=“://cnblogs/frank_xl/““://cnblogs/frank_xl/“)]publicinterfaceIWCFService{//操作契約[FaultContract(typeof(OverflowException))]//標(biāo)注以后,WCF客戶端才能區(qū)分錯(cuò)誤契約,否則會作為通信特別拋出stringSayHello(stringname);//操作契約stringSayGoodBye(stringname);}//2.效勞類,繼承接口。實(shí)現(xiàn)效勞契商定義的操作publicclassWCFServiceIWCFService{//實(shí)現(xiàn)接口定義的方法publicstringSayHello(stringname){if(name.Length<10){Console.ForegroundColor=ConsoleColor.Green;Console.WriteLine(“Hello!{0},return“Hello!“+name;}
“,name);P的錯(cuò)誤消息
else{//泛型類FaultException,可以包含不同的特別,可以序列化?;赟OAOverflowExceptionoe=newOverflowException;thrownewFaultException<OverflowException>(oe,“nameLengthismorethan10“);}}//實(shí)現(xiàn)接口定義的方法publicstringSayGoodBye(stringname){if(name.Length<10){Console.ForegroundColor=ConsoleColor.Green;Console.WriteLine(“GoodBye!{0},return“Hello!“+name;
“,name);}}else{OverflowExceptionoe=newOverflowException;thrownewFaultException<OverflowException>(oe,“nameLengthismorethan10“);}}}【5.2】宿主:WCF效勞。會打印每次的調(diào)用信息。比較簡潔,代碼如下:staticvoidMain(string[]args){//反射方式創(chuàng)立效勞實(shí)例,//Using方式生命實(shí)例,可以在對象生命周期完畢時(shí)候,釋放非托管資源using(ServiceHosthost=newServiceHost(typeof(WCFService.WCFService))){“,host.State);ints)
////推斷是否以及翻開連接,假設(shè)尚未翻開,就翻開偵聽端口if(host.StateCommunicationState.Opening)host.Open;//顯示運(yùn)行狀態(tài)Console.ForegroundColor=ConsoleColor.Yellow;Console.WriteLine(“Hostisruning!andstateis{0}Console.ForegroundColor=ConsoleColor.Red;//printendpointinformationforeach(ServiceEndpointseinhost.Description.Endpo{Console.WriteLine(“Hostislisteningat{0}“,se.Address.Uri.ToString);}}【5.3】客戶端:
}Console.Read;//WSBinding_IWCFServiceTest.WCFServiceClientwcfServiceProxy=//WSBinding_IWCFServiceTest.WCFServiceClientwcfServiceProxy=newTest.WCFServiceClient(“WSBinding_IWCFService“);erviceClient(“WSBinding_IWCFService“);//SayHello效勞try{Console.WriteLine(wcfServiceProxy.SayHello(“FrankXu“));Console.WriteLine(wcfServiceProxy.SayHello(“FrankXuLeiWSBinding“));}catch(FaultException<OverflowException>oe){Console.WriteLine(oe.Message);}catch(CommunicationExceptionce){Console.WriteLine(ce.Message);}finally{wcfServiceProxy.Close;}//ForDebugConsole.WriteLine(“PressanykeytoexitConsole.Read;“);【6】總結(jié):WCF特別處理的全部內(nèi)容。一下幾點(diǎn)我們要留意:FaultException特別,客戶端也可以獲得特別消息,該特別會導(dǎo)致通道消滅錯(cuò)誤。FaultException特別信息,但該
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國模塊式除塵器數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國顯像管移載裝置數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國無線吊秤數(shù)據(jù)監(jiān)測研究報(bào)告
- 第二章 第一節(jié) 鈉及其化合物-碳酸鈉和碳酸氫鈉(教學(xué)設(shè)計(jì)) 2023-2024學(xué)年高一上學(xué)期化學(xué)人教版(2019)必修第一冊
- 2025至2030年中國拋光精磨白蠟數(shù)據(jù)監(jiān)測研究報(bào)告
- MiniLED在電視行業(yè)的應(yīng)用
- Unit5 Lesson3~4 教學(xué)設(shè)計(jì)-2024-2025學(xué)年冀教版英語七年級上冊
- 2025年度網(wǎng)絡(luò)安全產(chǎn)品銷售承包與安全防護(hù)服務(wù)協(xié)議
- 二零二五年度自媒體平臺內(nèi)容運(yùn)營與數(shù)據(jù)分析合同
- 二零二五年度電子產(chǎn)品專賣店加盟協(xié)議書范文
- 銀行間本幣市場交易員資格考試真題模擬匯編(共586題)
- 苯乙酸安全技術(shù)說明書(msds)
- 幼兒園大班《防欺凌》教案5篇,幼兒園大班防欺凌活動(dòng)教案
- 衛(wèi)生管理初中級職稱大綱
- 團(tuán)員民主評議測評表
- 《當(dāng)代網(wǎng)絡(luò)文學(xué)作品發(fā)展研究6300字(論文)》
- 孟氏骨折與蓋氏骨折講解學(xué)習(xí)
- GB/T 9386-2008計(jì)算機(jī)軟件測試文檔編制規(guī)范
- GB/T 25137-2010鈦及鈦合金鍛件
- 第2課《說和做》課件(共30張ppt) 部編版語文七年級下冊
- 2022年廉政談話公司紀(jì)委書記對干部任前廉潔警示談話講話范文集團(tuán)國有企業(yè)國企新任職
評論
0/150
提交評論