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 ...
随机推荐
- 第三方Push服务:Urban Airship
转自:http://blog.csdn.net/kmyhy/article/details/7355756 关于推送通知,除了苹果的APNs之外,我们还有其它选择. Urban Airship就是其中 ...
- leetcode二分查找问题整理
自从做完leetcode上的三道关于二分查找的题后,我觉得它是比链表找环还恶心的题,首先能写出bugfree代码的人就不多,而且可以有各种变形,适合面试的时候不断挑战面试者,一个程序猿写代码解决问题的 ...
- iOS抗锯齿的方式
iOS开发中,有时候展示图片等内容的时候,会出现锯齿.比如笔者最近使用 iCarousel 控件的Cover flow效果来展示几幅图片时,两侧的图片出现了较为严重的锯齿,着实不好看.这里列出两个方式 ...
- Shell中的函数
一.在脚本中定义函数 与变量一样,在使用函数之前应该对函数进行定义.与其他编程类语言相比,由于没有数据类型的概念,因此也不必定义函数的类型. (1)在脚本中可以使用以下方式定义函数: function ...
- Disable right click on the website
Many developers/website owners like to keep their website images personal and don't want anyone to c ...
- Java 使用 Redis
安装 开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. Java的安装配置可以参考我们的 Ja ...
- <转>一道面试题比较synchronized和读写锁
一.科普定义(原文:http://903497571.iteye.com/blog/1874752) 这篇博文的两个主角“synchronized”和“读写锁” 1)synchronized 这个同步 ...
- iOS-UITextField中给placeholder动态设置颜色的四种方法
思路分析: 0.自定义UITextField 1.设置占位文字的颜色找-->placeholderColor,结果发现UITextField没有提供这个属性 2.在storyboard/xib中 ...
- solr英文使用的基本分词器和过滤器配置
solr英文应用的基本分词器和过滤器配置 英文应用分词器和过滤器一般配置顺序 索引(index): 1:空格 WhitespaceTokenizer 2:过滤词(停用词,如:on.of.a.an ...
- 新手不了解Xcode和mac系统可能犯得错误和我的建议
我是学iOS刚入门的新手,本人装的时黑苹果,我是喜欢完美的人,但黑苹果又是不完美的系统,比如关不了机啊,和显卡驱动不了啊,当自己的电脑出现白屏和卡顿的时候气的没脾气.我是一个新手.开始学的时java但 ...