深度剖析WCF框架具體架構(gòu)
WCF框架作為一個高效的.NET程序語言。其混合了函數(shù)語言和物件導向程序編制語言,并且完美的適用于編程、算法、技術(shù)和探索性開發(fā),因此可以在使用的過程當中感受到趣味性和吸引力。
缺省情況下,服務端發(fā)生異常,客戶端會得到一個缺省的Exception,但這個Exception實例中并不包括詳細的異常信息。只是告訴客戶端服務端不能正常工作。在服務器和客戶端模式的程序中,有些情況下,服務啟是不能完全信賴客戶端的。#t#
比如瀏覽器和web服務器之間,為了防止非法的客戶端從異常消息中獲取服務端的比較詳細的信息,使得心懷叵測之人有機可乘,所以服務啟對于異常 返回通常會比較模糊。WCF框架也采用了這種做法,缺省情況下,它返回給客戶端的異常只告知我出錯了,但不告訴人家他哪里錯了。這通常應用于客戶端來源不明的生產(chǎn)環(huán)境,以此保護服務程序。
包含詳細信息模式 如果想消息更友好一些,可以通過IncludeExceptionDetailInFaults=True來設置返回具體的異常信息,這樣就能告訴客戶端服務出錯了,并指出錯誤出在哪里。在程序開發(fā)階段或者有些應用場合,客戶端是受信任的,為了讓客戶端能更詳盡的了解服務端到底出了什么問題,WCF框架也支持發(fā)送詳細的錯誤消息給客戶端,這更有利于應用程序調(diào)試。
而返回詳細異常有兩種方法:第一種:通過在服務端的配置文件中設置:<serviceDebug includeExceptionDetailInFaults="False" />,第二種方式為通過在代碼中指定:[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
自定義異常消息模式 在WCF框架中,還支持更詳細的異常消息,它通過自定義的異常消息FaultMessage來傳達更多的內(nèi)容。WCF采用通用的Soap Fault來處理異常,并提供了FaultException和FaultException<FaultMessage>兩個類型來描述和操作異常。
通訊異常,這通常是因為鏈路的原因,比如服務沒有啟動,網(wǎng)絡阻塞等。這類異常是CommunicationException或者其派生類 狀態(tài)異常,這類異常通常是與上文提到的實例模式相關(guān)的,當訪問了一個已經(jīng)銷毀的服務器對象時便會引發(fā)此類型的異常,它們通常是ObjectDisposedException。