色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

WCF從理論到實(shí)踐(10):異常處理

系列文章導(dǎo)航:

WCF從理論到實(shí)踐(1):揭開神秘面紗

WCF從理論到實(shí)踐(2):決戰(zhàn)紫禁之巔

WCF從理論到實(shí)踐(3):八號(hào)當(dāng)鋪之黑色契約

WCF從理論到實(shí)踐(4):路在何方

WCF從理論到實(shí)踐(5):Binding細(xì)解

WCF從理論到實(shí)踐(6):WCF架構(gòu)

WCF從理論到實(shí)踐(7):消息交換模式

WCF從理論到實(shí)踐(8):事件廣播

WCF從理論到實(shí)踐(9):實(shí)例模式和對(duì)象生命周期

WCF從理論到實(shí)踐(10):異常處理

WCF從理論到實(shí)踐(11)-異步

WCF從理論到實(shí)踐(12):事務(wù)

WCF從理論到實(shí)踐(13):事務(wù)投票

WCF從理論到實(shí)踐(14):WCF解決方案模板

WCF從理論到實(shí)踐(15):響應(yīng)變化

WCF從理論到實(shí)踐(16):操作重載(帶視頻+ppt+源碼)

WCF從理論到實(shí)踐(17):OO大背離(帶視頻+ppt+源碼)


本文目的

通過閱讀本文,您能理解以下的知識(shí)

1) WCF中存在哪幾種異常處理方式?
2) 各種異常處理所適用的應(yīng)用場(chǎng)合?
3) WCF中常見的異常類型?
4) 代碼不騙人,用示例來演示效果,加深印象

本文適合的讀者

本文適合WCF的初學(xué)者,但要求對(duì)WCF有一些了解,并實(shí)現(xiàn)過簡(jiǎn)單的服務(wù)/客戶端。


WCF中存在哪幾種異常處理方式?

WCF定義了幾種異常處理模型,它們分別如下:

1) 缺省模式
2) 包含詳細(xì)信息模式
3) 自定義異常消息模式

各種異常處理所適用的應(yīng)用場(chǎng)合?

1) 缺省模式

缺省情況下,服務(wù)端發(fā)生異常,客戶端會(huì)得到一個(gè)缺省的Exception,但這個(gè)Exception實(shí)例中并不包括詳細(xì)的異常信息。只是告訴客戶端服務(wù)端不能正常工作。在服務(wù)器和客戶端模式的程序中,有些情況下,服務(wù)啟是不能完全信賴客戶端的,比如瀏覽器和web服務(wù)器之間,為了防止非法的客戶端從異常消息中獲取服務(wù)端的比較詳細(xì)的信息,使得心懷叵測(cè)之人有機(jī)可乘,所以服務(wù)啟對(duì)于異常 返回通常會(huì)比較模糊。WCF也采用了這種做法,缺省情況下,它返回給客戶端的異常只告知我出錯(cuò)了,但不告訴人家他哪里錯(cuò)了。這通常應(yīng)用于客戶端來源不明的生產(chǎn)環(huán)境,以此保護(hù)服務(wù)程序。  

2) 包含詳細(xì)信息模式

如果想消息更友好一些,可以通過IncludeExceptionDetailInFaults=True來設(shè)置返回具體的異常信息,這樣就能告訴客戶端服務(wù)出錯(cuò)了,并指出錯(cuò)誤出在哪里。在程序開發(fā)階段或者有些應(yīng)用場(chǎng)合,客戶端是受信任的,為了讓客戶端能更詳盡的了解服務(wù)端到底出了什么問題,WCF也支持發(fā)送詳細(xì)的錯(cuò)誤消息給客戶端,這更有利于應(yīng)用程序調(diào)試。而返回詳細(xì)異常有兩種方法:第一種:通過在服務(wù)端的配置文件中設(shè)置:,第二種方式為通過在代碼中指定:[ServiceBehavior(IncludeExceptionDetailInFaults=true)]

3) 自定義異常消息模式

在WCF中,還支持更詳細(xì)的異常消息,它通過自定義的異常消息FaultMessage來傳達(dá)更多的內(nèi)容。WCF采用通用的Soap Fault來處理異常,并提供了FaultException和FaultException兩個(gè)類型來描述和操作異常。

WCF中常見的異常類型?

WCF包括三種常見類型的異常:

1) 通訊異常,這通常是因?yàn)殒溌返脑颍热绶?wù)沒有啟動(dòng),網(wǎng)絡(luò)阻塞等。這類異常是CommunicationException或者其派生類
2) 狀態(tài)異常,這類異常通常是與上文提到的實(shí)例模式相關(guān)的,當(dāng)訪問了一個(gè)已經(jīng)銷毀的服務(wù)器對(duì)象時(shí)便會(huì)引發(fā)此類型的異常,它們通常是ObjectDisposedException
3) 服務(wù)異常,由服務(wù)端根據(jù)具體的業(yè)務(wù)邏輯觸發(fā),通常是FaultException 值得注意的是當(dāng)拋出服務(wù)異常的時(shí)候,不同的實(shí)例模式的處理方式有所不同:

PerSession:這種模式下,拋出異常,服務(wù)實(shí)例將銷毀,客戶端拋出FaultException,客戶端代理對(duì)象無法繼續(xù)使用

PerCall:這種模式下,拋出異常,服務(wù)實(shí)例也將銷毀。客戶端代理對(duì)象無法繼續(xù)使用

Single:這種模式下,拋出異常,服務(wù)實(shí)例會(huì)照舊運(yùn)行。客戶端代理無法繼續(xù)使用。

代碼不騙人,用示例來演示效果,加深印象

本文所實(shí)現(xiàn)的實(shí)例非常簡(jiǎn)單,目的就是想驗(yàn)證一下各種異常處理方式下的不同表現(xiàn)。

1) 缺省模式

在示例中,我們這樣拋出異常 

public string GetWelcomeInfo([ParaAtt(CanSetNull=false)] string name) 



ParameterInfo para 
= MethodInfo.GetCurrentMethod().GetParameters()[0]; 

ParaAtt att 
= ParaAtt.GetCustomAttribute(para, typeof(ParaAtt)) as ParaAtt; 

if (!att.CanSetNull && name == null



throw new Exception("參數(shù)不能設(shè)置為null"); 

}
 

return "Hello," + name; 

}
 

NET技術(shù)WCF從理論到實(shí)踐(10):異常處理,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 佛教| 华蓥市| 漳州市| 丰都县| 临泉县| 正宁县| 娱乐| 旺苍县| 洪雅县| 六枝特区| 梅河口市| 定远县| 揭阳市| 湛江市| 绿春县| 南丰县| 孙吴县| 彰化县| 青河县| 唐河县| 涞源县| 吉水县| 墨江| 德保县| 普洱| 普兰店市| 永嘉县| 陕西省| 高青县| 内江市| 开江县| 岳阳县| 拜城县| 长治县| 台湾省| 咸宁市| 海原县| 崇阳县| 方正县| 栾川县| 旌德县|