WCF之错误和异常
- CLR异常无法跨越服务边界,所有的异常都被封装(序列化)为SOAP Fault,可以让所有平台的用户接收到.

- SOAP1.1只有Body.1.2中含有Header+Body.
- 未捕获异常
- 异常会从逻辑层传递到服务层,为了保护Server,不会把异常的详细信息返回给客户端,而只会有一个通用的SOAP Fault.
- SOAP格式依赖于绑定。在调试期间,可以使用InCludeExceptionDetailsInFaults来显示异常的调用栈等详细信息,方法为在Host的ServiceBehavior 中的Servicedebug中打开,或者在Serice的契约上添加.
- Throw
- 1)FaultException用于抛出简单的异常,可以提供错误原因和代码,和额外的SOAP错误元素。即使用CLR异常来提供详细信息。
- 2)FaultException<T>,为了能够传递,T必须是数据契约或者可序列化类型。T可以为CLR异常类型,但是不利于跨平台。在操作契约方法上:[FaultContract(typeof(***Ext))]….来表明方法有可能抛出***的异常类型,来更好的互操作。由于缺省时客户端不会意识到可能抛出错误的操作,其作为WSDL的一部分,实现强类型异常的客户端。可以应用到服务契约和操作上,操作应该抛出该Fault.
- 3)MessageFault:是SOAP Fault的CLR表示,为了更好的控制错误元素.
- 错误处理
- 支持集中化的错误处理:报告未捕捉异常,将适当的异常转化为Fault,修改Fault来保持一致性。
- 方法:为IErrorHanbler提供实现(方法:ProvideFault:发生异常后,异常信息返回并关闭会话前调用,用于修改和包装返回的异常信息,会阻赛客户端。
- HandleError:在异常返回给客户端后调用,不会阻赛通信,通常用于记录异常,在服务器段进行错误提示等等,此时与客户端没有任何关系),添加到配置好的服务行为上.
- 支持集中化的错误处理:报告未捕捉异常,将适当的异常转化为Fault,修改Fault来保持一致性。
- 策略
- 为了实现可互操作性:从业务逻辑抛出自定义CLR异常,将异常定义为数据契约,声明自定义异常类型为Fault,创建错误处理器将自定义异常转换为Fault,记录非自定义异常。一定要保持中立性.
- 常见的三种异常
1) 通讯异常,这通常是因为链路的原因,比如服务没有启动,网络阻塞等。这类异常是CommunicationException或者其派生类;
2) 状态异常,这类异常通常是与实例模式相关的,当访问了一个已经销毁的服务器对象时便会引发此类型的异常,它们通常是objectDisposedException;
3) 服务异常,由服务端根据具体的业务逻辑触发,通常是FaultException. 值得注意的是当抛出服务异常的时候,不同的实例模式的处理方式有所不同,但是客户端代理都将无法继续使用:PerSession:服务实例将销毁,客户端抛出FaultException; PerCall:服务实例也将销毁.Single:服务实例会照旧运行。
WCF之错误和异常的更多相关文章
- python的错误和异常
python错误和异常 错误 错误分为语法错误和逻辑错误 语法错误 >>> if File "<stdin>", line 1 if ^ Syntax ...
- Python错误和异常学习
一:错误解释 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 代码运行前的语法或者逻辑错误,语法错误在执行前修改,逻辑错误无法修改 二:异常 执行过程 ...
- PHP 错误与异常 笔记与总结(10)错误处理器测试
关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...
- Go语言项目的错误和异常管理 via 达达
Go语言项目的错误和异常管理 最近连续遇到朋友问我项目里错误和异常管理的事情,之前也多次跟团队强调过错误和异常管理的一些概念,所以趁今天有动力就赶紧写一篇Go语言项目错误和异常管理的经验分享. 首先我 ...
- Python学习笔记七-错误和异常
程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Pyt ...
- WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)
WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日 ...
- php错误及异常捕捉
原文:php错误及异常捕捉 在实际开发中,错误及异常捕捉仅仅靠try{}catch()是远远不够的. 所以引用以下几中函数. a) set_error_handler 一般用于捕捉 E_NOTI ...
- PHP错误与异常
请一定要注意,没有特殊说明:本例 PHP Version < 7 说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程 ...
- python 常见错误和异常 函数 正则表达式及多线程编程
生成随机密码#!/usr/bin/env python import stringfrom random import choice def gen_pass(num=9): all_chs = st ...
随机推荐
- POJ 2970 The lazy programmer(优先队列+贪心)
Language: Default The lazy programmer Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 1 ...
- VMWare虚拟机网络的三种工作模式
VMWare提供了三种工作模式: 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,需要手工为虚拟系 ...
- iOS开发——UI篇Swift篇&玩转UItableView(一)基本使用
UItableView基本使用 class ListViewController: UIViewController , UITableViewDataSource, UITableViewDeleg ...
- 《UCD火花集1-2》读后感
一个多月的时间都没有更新博客了,只因为9月份有了其他的任务,耽搁了一 ...
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
代码如下: public int Sum_Solution(int n) { int temp = n; boolean b = (temp>0)&&(temp += Sum_S ...
- python实现二叉树遍历算法
说起二叉树的遍历,大学里讲的是递归算法,大多数人首先想到也是递归算法.但作为一个有理想有追求的程序员.也应该学学非递归算法实现二叉树遍历.二叉树的非递归算法需要用到辅助栈,算法着实巧妙,令人脑洞大开. ...
- Java再学习——关于ConcurrentHashMap
ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的锁机制. 1,在并发方面, ConcurrentHashMap提供了好得多的并发性.多个读操作几 ...
- 小白日记50:kali渗透测试之Web渗透-CSRF
CSRF CSRF原理:经常与XSS混淆. 从信任的角度进行区分:XSS:利用用户对站点的信任:CSRF:利用站点对已经身份认证的信任(有一定的信任)[默认情况:站点不信任客户端] 结合社工在身份认证 ...
- JS后退, JS返回上一页, JS返回下一页
Javascript 返回上一页: 1. history.go(-1), 返回两个页面: history.go(-2); 2. history.back(). 3. window.history.fo ...
- C# unix时间戳转换
场景:由于业务需要和java 开发的xxx系统对接日志,xxx系统中用“1465195479100” 来表示时间,C# 里面需要转换做一下逻辑处理,见代码段. C#获取的unix时间戳是10位,原因是 ...