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 ...
随机推荐
- 使用SurfaceView和MediaPlayer实现视频做为背景
场景:像我们在Uber应用开场,看到一一段视频作为開始.这样子让用户非常快投入应用使用的场景中去,这样的以视频作为开场的应用,我们是不是认为非常高大上呢,哈哈,事实上是使用了SerfaceView去载 ...
- android studio 预览保持,因为是SDK版本过高,可以点击小图标机器人修改SDK版本号。
Exception raised during rendering: com/android/util/PropertiesMap
- Tfs服务器迁移(更改IP)后客户端(vs2013)配置方法
一.前言 公司开发项目需要进驻客户现场,局域网中的tfs代码服务器有时会有修改ip的情况发生.服务器ip修改后在vs2013中更改服务器ip地址非常麻烦,有些时候需要将代码重新进行映射.多次试验后将可 ...
- WPF 之 左键弹出操作菜单,并禁用右键菜单
在目前的WPF版本中,很多的控件都有一个ContextMenu的属性,可以设置组件的右键菜单,这点确实是很方便,但是有些时候我们可能会需要当单击鼠标左键才弹出这个ContextMenu,而不是单击鼠标 ...
- c#删除转义字符的方法,删除\0后所有字符串(菜鸟级别)
string str = "78738\01212"; string str_2= Regex.Unescape(str); int index = str_2.IndexOf(& ...
- 经典FormsAuthenticationTicket 分析
Asp.net中基于Forms验证的角色验证授权 Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多, ...
- nodejs 安装 postgresql module
# npm -gd install node-gyp # export PATH=$PATH:/usr/local/pgsql/bin # npm -gd install pg for test: # ...
- 【Android 界面效果22】Android的Tab与TabHost
Tab与TabHost 这就是Tab,而盛放Tab的容器就是TabHost 如何实现?? 每一个Tab还对应了一个布局,这个就有点好玩了.一个Activity,对应了多个功能布局. ①新建一个Tab项 ...
- Crosswalk入门
Crosswalk入门 CSDN资讯:Crosswalk的介绍 Crosswalk官方地址 上面的链接可以看到Crosswalk的介绍,Crosswalk种种吹牛逼的描述我就不写了.写一下我的使用感受 ...
- angularJs中筛选功能-angular.filter-1
技术分享:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/angular-filter-learn-1/ 以下介绍为自己在使用ang ...