常见WCF异常问题处理方案

开发 后端
文章总结了关于WCF异常处理的几个方法,例如:我们可以使用空FaultException(它只包含一个string字符串,称为错误原因)。

对于WCF也学习了一段时间,但是就是一直没有好好学一下,但是我对它的兴趣还是很大的,我觉得这个设计真是太好了,它可以统一 windows下的通信方式,而且仅仅通过改一下配置文件就可以改变通信方式,它是微软对SOA的一种架构设计,可以好好学一下。

#T#dotnet3.0是在 dotnet2.0的基础上加了几个功能块,WCF、WF、WPF、CardSpace,对于WCF说起来也很好理它的概念,首先有服务器端程,再有就是服务器端程序宿主,最后是客户端程序。在WCF中,如果没有指定,服务端的WCF异常不会传递到客户端,如:在等于0时,客户端根本不知道异常的原因据,也即"Divsionbyzero!"WCF异常信息不会传到客户端。

  1. [ServiceContract]  
  2. publicclassCalculatorService  
  3. ...{  
  4. [OperationContract]  
  5. intDivide(inta,intb)  
  6. ...{  
  7. if(b==0)thrownewException(“Divisionbyzero!”);  
  8. returna/b;  
  9. }  

在最简单的情况下,我们可以使用空FaultException(它只包含一个string字符串,称为错误原因),如下所示:

  1. [ServiceContract]  
  2. publicclassCalculatorService  
  3. ...{  
  4. [OperationContract]  
  5. intDivide(inta,intb)  
  6. ...{  
  7. if(b==0)thrownewFaultException(“Divisionbyzero!”);  
  8. returna/b;  
  9. }  

当然,我们可以定义强类型的WCF异常信息,并在方法上运用FaultContractAttribute来指定它,如下所示:

  1. [DataContract]  
  2. publicclassMathFault  
  3. ...{  
  4. [DataMember]  
  5. publicstringoperation;  
  6.  
  7. [DataMember]  
  8. publicstringdescription;  
  9. }  
  10.  
  11. [ServiceContract]  
  12. publicclassCalculatorService  
  13. ...{  
  14. [FaultContract(typeof(MathFault))]  
  15. [OperationContract]  
  16. intDivide(inta,intb)  
  17. ...{  
  18. if(b==0)  
  19. ...{  
  20. MathFaultm=newMathFault();  
  21. m.operation=”/”;  
  22. m.description=”Divisionbyzero!”;  
  23. thrownewFaultException<MathFault>(m);  
  24. }  
  25. returna/b;  
  26. }  
  27. }  

注意:不能用XmlSerializer来序列化Fault相关的对象实例,即使在其上使用了XmlSerializerFormatAttribute属性。

责任编辑:田树 来源: 博客
相关推荐

2009-11-06 15:25:25

WCF异常

2010-02-22 13:35:03

WCF异常处理

2009-11-09 10:10:13

WCF异常

2010-02-24 12:41:58

WCF异常处理

2010-02-24 14:05:08

WCF openati

2010-02-26 15:46:48

Silverlight

2019-08-29 14:30:16

代码开发工具

2010-02-25 14:53:44

WCF调用服务异常

2009-06-30 16:03:00

异常Java

2009-08-06 15:35:34

C# Web Serv

2022-06-21 13:48:30

Redis缓存

2009-12-07 15:50:27

WCF文件

2024-08-28 08:54:54

2009-12-22 16:03:03

WCF异常

2010-02-23 17:23:26

Python异常处理

2015-04-24 10:29:31

OpenStackCloudFoundrPaaS

2009-12-07 18:38:16

WCF异常

2024-05-24 10:56:24

PythonURL代码

2010-02-23 17:49:56

WCF传输大数据

2010-02-24 10:55:01

WCF跨域访问
点赞
收藏

51CTO技术栈公众号