好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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设计,内容丰富,非常人性化。从布局和内容来看也是以人为本,每个人来到这个首页都可以找到自己的入口。可以说是现代网页设计的典范。

哈佛大学

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

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

北京航空航天大学

北京邮电大学

复旦大学

哈尔滨工业大学

湖南大学

华中科技大学

吉林大学

南京大学

西北工业大学

北京大学

中国人民大学

四川大学

东南大学

上海交通大学

中山大学

天津大学

清华大学

电子科技大学

中国科学技术大学

武汉大学

西安电子科技大学

西安交通大学

厦门大学

浙江大学

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

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于WCF实现将服务器端的错误信息返回到客户端的详细内容...

  阅读:56次