Fork me on GitHub
WCF实现将服务器端的错误信息返回到客户端

最近在园子里转看到有人对如题的实现有疑问,今天有时间就写了项目把实现简单的讲解一下,如果你是牛逼人物那就绕道吧,哥不想浪费你的时间,现在开始:

默认WCF是不允许将服务器的异常信息返回到客户端的(主要是客户端不一定能够识别clr的异常信息),如果你有这方面的需求可以通过SOAP的Fault包的形式返回异常信息,首先要做的就是设置配置文件,将默认不允许返回错误信息的设置改成如下:

    <behaviors>
<serviceBehaviors>
<behavior name="Bhc">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/><!--如此設置會將服務器端得錯誤返回到客戶端,實際的發佈中需要將此項目設置成false-->
</behavior>
</serviceBehaviors>
</behaviors>

然后定义承载信息的DataContract

    [DataContract]
public class Erro
{
[DataMember]
public string Message
{
get; set;
}
}

上边的代码 就不用介绍了 就是一个数据合同

    //服務契約定義了可以遠程調用的對象和方法
//定義服務契約
[XmlSerializerFormat]//定義序列化的方式
[ServiceContract(SessionMode = SessionMode.Allowed)]//SessionMode = SessionMode.Allowed:設置此屬性意味著可以使用會話Binding
public interface IActionMain
{
//定義操作契約
[DataContractFormat]//定義序列化的方式
[OperationContract]
string GetName(string pInc);

[FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數據契約的結構數據
[FaultContract(typeof(DivideByZeroException))]
[OperationContract]
DataCollection Return();
}

在方法中定义属性,这里有两种实现

1.使用自定义的错误类型
        [FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數據契約的結構數據

2.使用系统的异常类型
        [FaultContract(typeof(DivideByZeroException))]
在契约实现类中将异常抛出

throw new FaultException<DivideByZeroException>(new DivideByZeroException("這個是自定義的異常!"));


到此服务器端的实现完成。

下边看客户端的实现

配置文件不需要特殊设置,调用函数,抓取异常,代码如下:

            try
{
return this.Channel.Return();
}
catch (FaultException<ErroInfo.Erro> exception)
{
throw new Exception(exception.Detail.Message);
}
catch(FaultException<DivideByZeroException> exception)
{
throw new Exception(exception.Detail.Message);
}

 

FaultException<ErroInfo.Erro> exception:这个抓取的是定义的异常类型。

FaultException<DivideByZeroException> exception:这个抓取的是系统异常类型

注意这里获取异常的信息的方法是exception.Detail.Message,而不是Message。

运行效果如下:

 

示例代码:Demo

高校主页PK

2011-12-21 09:54 by pingjiang, 2121 visits, 收藏编辑

每一所高校都有一个主页,但是各有各的特色。

首先我们看一下哈佛大学的2011年的主页,使用HTML5设计,内容丰富,非常人性化。从布局和内容来看也是以人为本,每个人来到这个首页都可以找到自己的入口。可以说是现代网页设计的典范。

哈佛大学

harvard

下面再看看国内的几所著名的高校的网页设计。一看就知道我们的差距在哪里。

*******不分先后 AND 不全*********

北京航空航天大学

buaa

北京邮电大学

bupt

复旦大学

fudan

哈尔滨工业大学

hit

湖南大学

hnu

华中科技大学

hust

吉林大学

jlu

南京大学

nju

西北工业大学

nwpu

北京大学

pku

中国人民大学

ruc

四川大学

scu

东南大学

seu

上海交通大学

sjtu

中山大学

sysu

天津大学

tju

清华大学

tsinghua

电子科技大学

uestc

中国科学技术大学

ustc

武汉大学

whu

西安电子科技大学

xidian

西安交通大学

xjtu

厦门大学

xmu

浙江大学

zju

http://www.cnblogs.com/Ref-tian

posted on 2011-12-23 10:36  HackerVirus  阅读(335)  评论(0)    收藏  举报