|
由于WCF采用.NET托管語言(C#和NET)作為其主要的編程語言,注定以了基于WCF的編程方式不可能很復(fù)雜。同時(shí),WCF設(shè)計(jì)的一個(gè)目的就是提供基于非業(yè)務(wù)邏輯的通信實(shí)現(xiàn),為編程人員提供一套簡單易用的應(yīng)用編程接口(API)。WCF編程模式的簡單性同樣體現(xiàn)在異常處理上面,本篇文章的主要目的就是對WCF基于異常處理的編程模式做一個(gè)簡單的介紹。
一、當(dāng)異常從服務(wù)端拋出
對于一個(gè)典型的WCF服務(wù)調(diào)用,我個(gè)人傾向于將潛在拋出的異常費(fèi)為兩種類型:應(yīng)用異常(Application Exception)和基礎(chǔ)結(jié)構(gòu)(Infrastructure Exception)。前者為應(yīng)用級別,主要體現(xiàn)為執(zhí)行某個(gè)服務(wù)操作的業(yè)務(wù)邏輯拋出的異常;而后者則是業(yè)務(wù)無關(guān)的,通過WCF本身的基礎(chǔ)架構(gòu)拋出,主要體現(xiàn)在對象的序列化、消息的處理、消息傳輸和消息的分發(fā)等等。在這里我們更多地關(guān)注與應(yīng)用異常。
首先,我們在不做任何異常處理相關(guān)操作的情況下,看看如果在服務(wù)端執(zhí)行某個(gè)服務(wù)操作的過程中拋出異常后,客戶端會得到怎樣的結(jié)果。我們通過實(shí)例的形式來演示這中場景。處于簡單和易于理解考慮,我們照例沿用計(jì)算服務(wù)的例子。
我們照例采用典型的四層結(jié)構(gòu)(Contract、Service、Hosting和Client),具體的層次在VS解決方案的劃分如圖1所示:
圖1 異常拋出實(shí)例解決方案結(jié)構(gòu)
下面代碼片斷表示服務(wù)契約(ICalculator)和服務(wù)類型(CalculatorService)的定義。為了簡潔,在服務(wù)契約接口中,我們僅僅定義了唯一一個(gè)用于進(jìn)行兩個(gè)整數(shù)觸發(fā)預(yù)算的方法Divide。服務(wù)契約和服務(wù)類型類型分別定義在項(xiàng)目Contracts和Services中。
1: using System.ServiceModel;
2: namespace Artech.WcfServices.Contracts
3: {
4: [ServiceContract(Namespace = "http://www.artech.com/")]
5: public interface ICalculator
6: {
7: [OperationContract]
8: int Divide(int x, int y);
9: }
10: }
NET技術(shù):WCF基本異常處理模式[上篇],轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。