• 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:在异常返回给客户端后调用,不会阻赛通信,通常用于记录异常,在服务器段进行错误提示等等,此时与客户端没有任何关系),添加到配置好的服务行为上.
  • 策略
    • 为了实现可互操作性:从业务逻辑抛出自定义CLR异常,将异常定义为数据契约,声明自定义异常类型为Fault,创建错误处理器将自定义异常转换为Fault,记录非自定义异常。一定要保持中立性.
  • 常见的三种异常
    • 1) 通讯异常,这通常是因为链路的原因,比如服务没有启动,网络阻塞等。这类异常是CommunicationException或者其派生类;

    • 2) 状态异常,这类异常通常是与实例模式相关的,当访问了一个已经销毁的服务器对象时便会引发此类型的异常,它们通常是objectDisposedException;

    • 3) 服务异常,由服务端根据具体的业务逻辑触发,通常是FaultException. 值得注意的是当抛出服务异常的时候,不同的实例模式的处理方式有所不同,但是客户端代理都将无法继续使用:PerSession:服务实例将销毁,客户端抛出FaultException;  PerCall:服务实例也将销毁.Single:服务实例会照旧运行。

WCF之错误和异常的更多相关文章

  1. python的错误和异常

    python错误和异常 错误 错误分为语法错误和逻辑错误 语法错误 >>> if File "<stdin>", line 1 if ^ Syntax ...

  2. Python错误和异常学习

    一:错误解释 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 代码运行前的语法或者逻辑错误,语法错误在执行前修改,逻辑错误无法修改 二:异常 执行过程 ...

  3. PHP 错误与异常 笔记与总结(10)错误处理器测试

    关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...

  4. Go语言项目的错误和异常管理 via 达达

    Go语言项目的错误和异常管理 最近连续遇到朋友问我项目里错误和异常管理的事情,之前也多次跟团队强调过错误和异常管理的一些概念,所以趁今天有动力就赶紧写一篇Go语言项目错误和异常管理的经验分享. 首先我 ...

  5. Python学习笔记七-错误和异常

    程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Pyt ...

  6. WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)

    WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日 ...

  7. php错误及异常捕捉

    原文:php错误及异常捕捉 在实际开发中,错误及异常捕捉仅仅靠try{}catch()是远远不够的. 所以引用以下几中函数. a)   set_error_handler 一般用于捕捉  E_NOTI ...

  8. PHP错误与异常

    请一定要注意,没有特殊说明:本例 PHP Version < 7 说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程 ...

  9. python 常见错误和异常 函数 正则表达式及多线程编程

    生成随机密码#!/usr/bin/env python import stringfrom random import choice def gen_pass(num=9): all_chs = st ...

随机推荐

  1. 使用SurfaceView和MediaPlayer实现视频做为背景

    场景:像我们在Uber应用开场,看到一一段视频作为開始.这样子让用户非常快投入应用使用的场景中去,这样的以视频作为开场的应用,我们是不是认为非常高大上呢,哈哈,事实上是使用了SerfaceView去载 ...

  2. android studio 预览保持,因为是SDK版本过高,可以点击小图标机器人修改SDK版本号。

    Exception raised during rendering: com/android/util/PropertiesMap

  3. Tfs服务器迁移(更改IP)后客户端(vs2013)配置方法

    一.前言 公司开发项目需要进驻客户现场,局域网中的tfs代码服务器有时会有修改ip的情况发生.服务器ip修改后在vs2013中更改服务器ip地址非常麻烦,有些时候需要将代码重新进行映射.多次试验后将可 ...

  4. WPF 之 左键弹出操作菜单,并禁用右键菜单

    在目前的WPF版本中,很多的控件都有一个ContextMenu的属性,可以设置组件的右键菜单,这点确实是很方便,但是有些时候我们可能会需要当单击鼠标左键才弹出这个ContextMenu,而不是单击鼠标 ...

  5. c#删除转义字符的方法,删除\0后所有字符串(菜鸟级别)

    string str = "78738\01212"; string str_2= Regex.Unescape(str); int index = str_2.IndexOf(& ...

  6. 经典FormsAuthenticationTicket 分析

    Asp.net中基于Forms验证的角色验证授权 Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多, ...

  7. nodejs 安装 postgresql module

    # npm -gd install node-gyp # export PATH=$PATH:/usr/local/pgsql/bin # npm -gd install pg for test: # ...

  8. 【Android 界面效果22】Android的Tab与TabHost

    Tab与TabHost 这就是Tab,而盛放Tab的容器就是TabHost 如何实现?? 每一个Tab还对应了一个布局,这个就有点好玩了.一个Activity,对应了多个功能布局. ①新建一个Tab项 ...

  9. Crosswalk入门

    Crosswalk入门 CSDN资讯:Crosswalk的介绍 Crosswalk官方地址 上面的链接可以看到Crosswalk的介绍,Crosswalk种种吹牛逼的描述我就不写了.写一下我的使用感受 ...

  10. 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 ...