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 ...
随机推荐
- javascript------>delete
delete只能删除属性,不能删除变量 var a = "roboce"; delete a; // false a; b = "haha"; delete b ...
- [Express] Level 1: First Step
Installing Express Let's start building our new Express application by installing Express. Type the ...
- iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)
iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController) 前面我们介绍了StoryBoard这个新技术,和纯技术 ...
- Android Studio中导入第三方库
之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...
- ORCLE INNODB 博客与 innodb_lru_scan_depth
https://blogs.oracle.com/mysqlinnodb/ http://mysqllover.com/?p=485 •MySQL. MySQL 5.6.10 http://www.m ...
- ubuntu搭建LAMP服务器
新手记录下...... 安装apache apt-get install apache2 安装mysql apt-get install mysql-server 安装php apt-get inst ...
- How to Install and Configure Nginx from Source on centos--转
1.CentOS - Installing Nginx from source http://articles.slicehost.com/2009/2/2/centos-installing-ngi ...
- android stuido 在线安装svn插件,添加版本库无响应
问题:android stuido 中在线安装svn插件,添加版本库无响应. 原因: 由于android stuido 版本较高,在线安装1.6x 版本的svn,添加版本库一直没有响应,最后卡死.. ...
- java发送邮件 实现编辑html代码
这个例子相当的简单,一看就懂( 此例仅支持163发送163及qq邮箱) 首先要导入两个必须jar包:mail-1.4.4.jar 和 commons-email-1.2.jar这两个jar包是我用的 ...
- FileListEntityProcessor
一个简单的实体处理程序,可以用于枚举标准文件系统中的文件列表,它不需要使用DataSource.属性如下: fileName:(必填) 用正则表达式来标记文件名 baseDir:(必填) 基础目录,绝 ...