十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)關(guān)于WCF異常處理解決方案是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站于2013年創(chuàng)立,先為鼓樓等服務(wù)建站,鼓樓等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為鼓樓企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
異常處理在我們的程序中是不可缺少的,異??梢苑答佄覀冃畔?,如果還不知道WCF異常的朋友請看下面我為大家介紹一下。異常消息與特定技術(shù)有關(guān),.NET異常同樣如此,因而WCF并不支持傳統(tǒng)的異常處理方式。如果在WCF服務(wù)中采用傳統(tǒng)的方式處理異常,由于異常消息不能被序列化,因而客戶端無法收到服務(wù)拋出的WCF異常,例如這樣的服務(wù)設(shè)計(jì):
[ServiceContract(SessionModeSessionMode = SessionMode.Allowed)] public interface IDocumentsExplorerService { [OperationContract] DocumentList FetchDocuments(string homeDir); } [ServiceBehavior(InstanceContextModeInstanceContextMode=InstanceContextMode.Single)] public class DocumentsExplorerService : IDocumentsExplorerService,IDisposable { public DocumentList FetchDocuments(string homeDir) { //Some Codes if (Directory.Exists(homeDir)) { //Fetch documents according to homedir } else { throw new DirectoryNotFoundException( string.Format("Directory {0} is not found.",homeDir)); } } public void Dispose() { Console.WriteLine("The service had been disposed."); } }
則客戶端在調(diào)用如上的服務(wù)操作時(shí),如果采用如下的捕獲方式是無法獲取該WCF異常的:
catch (DirectoryNotFoundException ex) { //handle the exception; }
為了彌補(bǔ)這一缺陷,無法識別的WCF異常均當(dāng)作為FaultException異常對象,因此,客戶端可以捕獲FaultException或者Exception異常:
catch (FaultException ex) { //handle the exception; } catch (Exception ex) { //handle the exception; }
全面闡述WCF可靠性傳輸性能
編程實(shí)現(xiàn)WCF有序傳遞案例分析
關(guān)于WCF服務(wù)元數(shù)據(jù)交換編程揭密
三種WCF服務(wù)方式一點(diǎn)通
談?wù)勱P(guān)于WCF事務(wù)屬性
然而,這樣捕獲的異常,卻無法識別DirectoryNotFoundException所傳遞的錯(cuò)誤信息。尤為嚴(yán)重的是這樣的異常處理方式還會(huì)導(dǎo)致傳遞消息的通道出現(xiàn)錯(cuò)誤,當(dāng)客戶端繼續(xù)調(diào)用該服務(wù)代理對象的服務(wù)操作時(shí),會(huì)獲得一個(gè)CommunicationObjectFaultedException 異常,無法繼續(xù)使用服務(wù)。如果服務(wù)被設(shè)置為PerSession模式或者Single模式,異常還會(huì)導(dǎo)致服務(wù)對象被釋放終止服務(wù)。WCF并不推薦在應(yīng)用程序域中創(chuàng)建多個(gè)ServiceHost實(shí)例。如果要托管多個(gè)服務(wù),完全可以在一個(gè)宿主中通過多個(gè)Endpoint公開多個(gè)WCF服務(wù)。由于應(yīng)用程序域?qū)Π踩M(jìn)行了隔離,如果需要提供不同的安全上下文,則有必要?jiǎng)?chuàng)建多個(gè)ServiceHost實(shí)例。
上述就是小編為大家分享的關(guān)于WCF異常處理解決方案是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。