在ASP.NET Web service开发中,会用到一个很重要的类型:SoapException,它是一个基于Soap请求机制的异常处理类型, 这也是一个很重要的类型,在编写web service函数时,我们需要用它来抛出异常信息,以便供客户端获取并进行必要的异常处理. 我们可以在它的detail属性里加入自定义的详细的错误信息。

这里有两种写法,

第一种, 就是网上流转某大虾写的,用一个String变量任意拼构一个XML字符串,然后用XmlDocument load XML字符串,再将DocumentElement转入到SoapException中构造函数中:

string strXmlOut = @"<detail>" //注意,一定要用小写的detail节点!
                         + "<Error>"
                         + "<ErrorNumber>" + errorNumber + "</ErrorNumber>"
                         + "<ErrorMessage>" + errorMessage + "</ErrorMessage>"
                         + "<ErrorSource>" + errorSource + "</ErrorSource>"
                         + "</Error>"
                         + "</detail>";

//装载为Xml文档
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(strXmlOut);

//实例化SoapException
        SoapException soapEx = new SoapException(errorMessage, faultCodeLocation, uri, xmlDoc.DocumentElement);

throw soapEx;

第二种,就是MSDN里介绍的正规写法:

XmlDocument doc = new XmlDocument();
            XmlNode node = doc.CreateNode(XmlNodeType.Element,
                SoapException.DetailElementName.Name,
                SoapException.DetailElementName.Namespace);

XmlNode xmlErrorNumber= doc.CreateNode(XmlNodeType.Element, "ErrorNumber", "http://tempuri.org/");
            xmlErrorNumber.InnerText = exceptionInfo.ErrorCode; //exceptionInfo是一个自定义类型

node.AppendChild(xmlErrorNumber);

XmlNode xmlErrorMessage= doc.CreateNode(XmlNodeType.Element, "ErrorMessage", "http://tempuri.org/");
            xmlErrorNumber.InnerText = exceptionInfo.StackTrace;

node.AppendChild(xmlErrorMessage);

            SoapException soapEx = new SoapException(exceptionInfo.ErrorMessage, faultCodeLocation, uri, node);

throw soapEx;

参考:http://www.techmango.com/blog/article/DotNet/ASP_NET_SoapExtension_SoapException.htm

转载于:https://www.cnblogs.com/plain-heart/archive/2010/11/24/1887070.html

WebService开发中SoapException的用法相关推荐

  1. Rive在Flutter开发中的基本用法

    概述 Rive Flutter(以下简称Rive)是Rive提供的运行库,是一个实时交互设计和动画工具,可以帮助Flutter开发者在应用中嵌入复杂的动画.设计人员和开发人员可以使用协作编辑器创建响应 ...

  2. c#winform开发中DialogResult的用法

    1.DialogResult经常用在winform开发中的登录,设置参数中,在主窗体中弹出设置参数的窗体,当我们点击设置参数窗体上的确定按钮时,直接返回设置参数窗体的DialogResult的属性即可 ...

  3. EditText 集锦 - 开发中常用的用法及遇到的各种坑

    前言 EditText ,文本输入框,一个再熟悉不过的的控件,在开发当中,我们需要经常用到.这边文章,主要是记录 EditText 的常用用法,需要的时候可以直接复制张贴,提高效率.同时,本文章会持续 ...

  4. EditText 集锦 - 开发中常用的用法及遇到的各种坑,androidtv开发视频教程

    android:background //设置EditText背景."@null"设置背景为透明.当我们设置背景后,EditText的那条线就会消失. android:textAp ...

  5. 【程序设计】接口在软件开发中的普遍用法

    文章目录 Interface GUI API 公共接口 [UML/Java]-Interface Interface 接口(Interface)的概念在计算机科学和软件工程领域的许多上下文中使用,并具 ...

  6. iOS开发中extension的用法(延展)

    extension可以认为是匿名的category,但是这个extension相对于category有有一个特殊功能: 在extension中可以定义可写的属性,公有可读.私有可写的属性(Public ...

  7. 【干货】Redis在Java开发中的基本使用和巧妙用法

    Redis是一款高性能的内存数据结构存储系统,能够支持多种数据结构类型,如字符串.哈希.列表.集合.有序集合等,也能够支持高级功能,如事务.发布/订阅.Lua脚本等,具有高可用性.高并发性和可扩展性的 ...

  8. git 只merge部分_[Skill]俩小时掌握多人开发中git的主要用法

    前言 几个月前看完了git文档,但是在实际开发中对很多git命令的具体影响仍有疑惑,比方说pull.fetch和rebase三个命令和检出位置拎不清. Git - Book​git-scm.com 安 ...

  9. python中split啥意思_python中split的用法详解_后端开发

    如何用python正则表达式匹配字符串?_后端开发 用python正则表达式匹配字符串的方法:1.当匹配单个位置的字符串时,可以使用[(.+?)]正则表达式来提取:2.当连续多个位置的字符串匹配时,可 ...

最新文章

  1. 服务器运行速度影响哪些因素,影响服务器运行的九大因素
  2. mysql中如何求字段的个数字_求高手帮小弟解决一下!关于mysql字段中数字提取求和的问题?...
  3. 深入理解DOM节点关系
  4. matlab中腐蚀图像的编写,Matlab实现二值图像的腐蚀算法源代码
  5. python return用法_初学Python要了解什么 装饰器知识汇总有哪些
  6. 加密后变成乱码解密_个人磁盘加密软件,使用VeraCrypt进行整盘加密介绍
  7. ruby学习--block
  8. java获取屏幕上某坐标点的颜色
  9. 2月第4周回顾:IT求职困惑不少 虚拟化热点不断
  10. 数据库建表操作SQL代码大全
  11. 服务器机械硬盘坏了怎么修复,硬盘修复软件:如何修复硬盘错误?
  12. DataSource 详解
  13. ubuntu 20.10 下载安装教程
  14. android 多渠道打包不同的包名、应用名、应用图标
  15. ubuntu apt-get install更新域名解析失败问题的处理方法
  16. 三级等保 mysql8.0.24密码策略设置
  17. Spring Boot入门(12):一文吃透Spring Boot整合MyBatis-Plus | 保姆级教程,建议收藏
  18. 【图像增强】Learning Enriched Features for Real Image Restoration and Enhancement 阅读笔记
  19. tuts4you 注册_设计和开发完整的网站(Tuts + Mini系列,第3页)
  20. element date-picker range类型时间选择器 限制选中前后7天的时间的方法

热门文章

  1. smoke中文_smoke的意思在线翻译,解释smoke中文英文含义,短语词组,音标读音,例句,词源【澳典网ODict.Net】...
  2. at24c16如何划分出多个读写区_读写AT24C02,并用1602显示
  3. javaweb网关_Java网关服务-AIO(三)
  4. flutter打包的app有多大_Flutter原生混合开发
  5. centos图形化桌面的文件在哪_Windows 远程连接 CentOS 7 图形化桌面
  6. 电路中的这些符号标识,你真的明白吗?
  7. 嗨,你选择自学成才还是参加培训?
  8. Windows环境下yolov3+darknet批量处理图片完整教程
  9. VHDL简单微处理器的设计
  10. 逻辑回归模型 python_机器学习-逻辑回归分析(Python)