SOAP消息机制简介

用C#编写SOAP消息 因为SOAP消息是基于XML文档的,因此在C#中可以使用XmlTextWriter编写SOAP消息首先定义一个XmlTextWriterst = new MemoryStream(1024);//分配空间XmlTextWriter tr = new XmlTextWriter(st,Encoding.UTF8);//初始化一个XmlTextWriter,编码方式为Encoding. 阅读详情

转自:http://www.cnblogs.com/tyb1222/archive/2012/03/01/2375532.html


SOAP(Simple Object Access Protocol,简单对象访问协议)作为一种信息交互协议在分布式应用中非常广泛,如WebService。在使用.Net开发WebService时候,只需要在对应的方法上加上WebMethod特性然后就可以通过网络进行SOAP消息的发送。这样在平时使用Webservice时,可能不太关心SOAP消息的结构到底是怎样的。下面大致说说SOAP消息的结构,以及使用工具监听SOAP消息报文。
本节目录:

  • 1、XSD是什么
  • 2、基于SOAP的数据交互系统是XSD的
  • 3、SOAPSOAP消息结构
  • 4、支持SOAP的协议
  • 5、通过SOAPHeader扩展SOAP
  • 6、SOAP自定义异常
  • 7、监听SOAP消息

 

1、XSD是什么 
  XSD(XML Scheme Definition,XML大纲定义)文档用来描述XML的结构和内容。它本身也是一个XML文档,通过它我们可以知道xml文档中包含哪些节点,以及这些节点应该是什么类型的值等。常见的如WSDL文档。

 

2、基于SOAP的数据交互系统应该是XSD的 
  WebService数据交互格式是基于SOAP的,而实际上SOAP就是具有SOAP格式的XML数据。基于XML的跨平台特性,各个系统在调用WebService时,都需要能准确的理解WebService需要什么类型的参数,有哪些参数,返回值是什么等等。要很好的说明这些问题,XSD是一种很好的选择。所以说这类系统是XSD的。。

 

3、SOAP消息结构  
  首先看看如下SOAP请求消息:

  它包含由SOAP信封(<soap:Envelope>) SOAP 头(<soap:Header>) SOAP消息体 (<soap:Body>)组成。其中<soap:Envelope>是SOAP消息中的根节点,是SOAP消息中必须的部分;<soap:Header>是SOAP消息中可选部分,如果SOAP消息中含有它,那么它一定要是soap:Envelope>中的第一个元素节点;<soap:Body>是SOAP中必须部分,如果SOAP消息中没有<soap:Header>,那么<soap:Body>必须是SOAP中第一个元素节点。
  此外:在WebService返回给消费者时,如果服务发生异常,则返回给服务消费者还有<soap:Fault>元素节点,它包含在<soap:Body>中。如下:

1
2
3
4
5
6
7
8
<soap:Body>
<soap:Fault>
<faultcode xmlns:q0= "ns=cnblogs.com/tyb1222" >q0:code</faultcode>
<faultstring>System.Web.Services.Protocols.SoapException: 0x00</faultstring>
<faultactor/>
<detail />
</soap:Fault>
</soap:Body>

<faultcode>是<soap:Fault>中必须的元素节点,它让消费者能识别错误。

<faultstring>是<soap:Fault>中必须的元素节点,用来描述错误文本信息
<faultactor/>不是<soap:Fault>中必须的元素节点,用来描述是在哪个路由节点上出错。
<detail >用来描述与<soap:Body>有关的应用程序集错误信息。如果Body不能被正确处理,那 <detail >就是<soap:Fault>中必须元素

 

4、支持SOAP的协议 
  通常,访问的WebService都是通过Web服务器。访问Web服务器最常见的应用协议当然是久负盛名的HTTP了。HTTP也就成了支持SOAP最常用的协议。实际上支持SOAP支持的任何传输协议实现应用程序之间的通讯,包括TCP、SMTP等。

 

5、通过SOAPHeader扩展SOAP   
  在.Net平台上开发WebService,如果不通过SOAPHeader对SOAP头进行扩展,SOAP消息中只有<soap:Envelope>、<soap:Body>这两个SOAP中必须的两个节点。很多时候SOAPHeader的使用也是SOAP种经常用到的部分,如通过SOAPHeader 对消费者做身份认证,或者给SOAP消息中使用Actor来进行SOAP消息路由等。
  通过SOAPHeader扩展SOAP,可以在派生类中重写SOAPHeader的实现。注意通过派生类实现对SOAPHeader重写时,需要给派生类定义一个无参数构造函数,否则发布访问WebService时会报因为没有无参数构造函数而无法序列化的问题。
简要介绍一下扩展SOAPHeader。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public  class  EaxmHeader : SoapHeader
{
      public  string  UserName {  get ;  set ; }
      public  string  Password {  get ;  set ; }
 
     public  EaxmHeader()
     {
     }
 
     public  EaxmHeader( string  userName, string  password)
     {
         UserName = userName;
         Password = password;
     }
}

  然后在WebService具体函数接口上通过SOAPAttribute中MemberName设置为将EaxmHeader对象添加。如下:

[WebMethod]
[SoapHeader("header", Direction = SoapHeaderDirection.InOut)]
public int divide(int x, int y)

 

6、SOAP自定义异常  
  网络通信中发射异常是难免的。有时为了保障服务的安全性而尽量少暴露服务信息并且需要让消费者知晓在调用过程中发生异常的原因,一般可通过抛出自定义SOAPException异常,在<soap:Fault> 中自定义<faultcode>错误码和 <faultstring>提示文本信息。如在catch中 throw new SOAPException(...)

 

7、监听SOAP消息 
  SOAP消息监听工具有MSSoapT(Microsoft SOAP ToolKit),tcpTrace等工具。下面就说说使用它们来监听SOAP消息。
发布完WebService以后,可以通过WSDL通过WebService URI地址或者是WebService的WSDL文档来生成服务代理类(参见前一节)。
代理类生产完成以后,在代理类的构造函数中设置端口号。如:

public  class  ExamService : SoapHttpClientProtocol
{
     private  SendOrPostCallback divideOperationCompleted;
 
     /// <remarks/>
     public  ExamService()
     {
     }
....
}

  上面http://193.168.11.94:8866 就是在使用工具监听SOAP消息时本地的端口号。注意:如果是在VS调试环境下,使用Asp.Net Development Server也会使用一个端口号,实际监听的端口号是代理类中设置的端口,和它一般是不同。


7.1、使用MSSoapT监听SOAP 消息 
设置监听端口、主机等信息,如下图:

这样,调试程序时,MSSoapT监听到SOAP 消息如下图:

上半部分为请求SOAP消息,下部分为返回SOAP消息。如下图:


7.2、使用tcpTrace监听SOAP 消息。 


这样监听到的消息如下图:


深入理解SOAP协议:基于XML的分布式通信协议 在当今高度互联的网络环境下,分布式系统之间的通信变得越来越重要。为了实现跨网络的可靠通信,诸如SOAP(Simple Object Access Protocol)这样的协议应运而生。SOAP是一种基于XML的协议,旨在实现在分布式环境中的结构化信息交换。本文将深入探讨SOAP协议的特性、组成部分以及其在分布式系统中的应用。综上所述,SOAP协议作为一种基于XML的分布式通信协议,具有灵活性、扩展性和安全性等特点,在当今分布式系统中发挥着重要作用。 阅读详情

相关推荐

SOAP 总结

SOAP是一种基于XML的通信协议,用于在分散或分布式的环境中交换信息。它具有标准化、平台无关性、安全性和可扩展性等特点,广泛应用于企业应用集成、B2B电子商务和Web服务等领域。然而,SOAP的复杂性和性能问题也是需要考虑的因素。

xyq2024的博客 535

SOAP协议

SOAP协议

老顽固也可爱 4617

Axis2客户端实战指南:构建与部署Web服务

Axis2作为Apache软件基金会下的一个重量级Web服务引擎,提供了一种灵活的方式来构建、部署和服务Web服务。它支持SOAP和RESTful风格的服务,并且能够使用多种消息传输协议,如HTTP、JMS等。Axis2框架的核心优势在于其模块化设计,这让开发者可以轻松地添加自定义功能、增强业务逻辑或扩展框架功能。随着企业对Web服务要求的不断提升,Axis2框架以其高性能、高可靠性和可扩展性成为IT行业广泛使用的解决方案。在深入了解Axis2框架之前,我们先来简要探索其核心组件的功能和应用。

weixin_42581846的博客 802

SOAP协议解析

一、SOAP协议简介 1、SOAP简介  SOAP(Simple Object Accrss Protocol,简单对象访问协议)是一种简单的基于XML的协议,可以使应用程序在分散或分布式的环境中通过HTTP来交换信息。           SOAP基于XML语言和XSD标准,其定义了一套编码规则,编码规则定义如何将数据表示为消息,以及怎样通过HTTP协议来传输SOAP消息,由四部分组成: ...

baidu_25340817的博客 5万+

weblogic等保测评操作过程

weblogic网络安全等级测评保护操作

qq_48257021的博客 2761

微生物测序分析LEfSe

LEfse分析定义 LEfse分析即LDA Effect Size分析,可以实现多个分组之间的比较,还进行分组比较的内部进行亚组比较分析,从而找到组间在丰度上有显著差异的物种(即biomaker);

宁生信 5万+

[转]SOAP消息全面解析

SOAP消息可以是XML文件,该文件中一定要包含SOAPEnvelope(封装)和SOAPBody(体),而SOAPHeader(头)则是可以选择性的。 SOAP消息包含下列各项: ·Envelope是XML文件的顶层元素,代表该文件为SOAP消息。 ·Header提供了向SOAP消息中添加关于这条SOAP消息的某些要素(feature)的机制,不需要事先与商业伙...

929

PADS安装教程(超详细)

声明:个人实践 一、工具准备 pads9.5完整破解版百度网盘提取码【wjx9】 链接:https://pan.baidu.com/s/1pIP6BJO435ssmF7Hjwyz8A 提取码:wjx9 安装环境:win10 64位 二、开始解压安装 关闭杀毒,exe以管理员身份运行 点击【skip】,不然又得licese 点击【agree】 点击【modify】 设置安装的工具、路径及工程路径 设置完成后,开始【install】 在之后注册。 将Crack复制到PADS安装目录

qq_42057393的博客 5万+

SOAP消息

SOAP消息

qq_44884203的博客 1556

【教程4>第5章>第19节】基于Gardner环的位同步系统MATLAB仿真与带时偏基带数据导出

由于在FPGA中,时偏的影响主要是由系统收发两端晶振的不同步带来的,所以在仿真测试阶段,很难直接通过FPGA来模拟这个因素,所以我们采用MATLAB模拟带时偏的基带输入信号,并将其导出,由FPGA调用作为测试信号源。可以看到,同步之后(图3)相对于带时偏的基带信号(图2),其更接近标准的数据(图1),且抖动较小。订阅过的朋友可以复习下这个课程,没有订阅的朋友,也可以直接复制如下的程序进行仿真测试。上述程序中,加入时偏的基带信号,通过子函数。同步之后,可以恢复出标准的QPSK星座图。

FPGA/MATLAB学习教程/源码/项目合作开发 521

Python内置函数zip()——《Python内置函数手册》Python老吕编著

zip()函数是 Python 中的一个内置函数,用于将多个可迭代对象(如列表、元组、字符串等)中对应的元素打包成一个个元组,然后返回由这些元组组成的迭代器。zip()函数常用于将多个序列并行迭代,或者用于数据对齐。zip()它返回一个迭代器,这意味着你可以逐个获取打包后的元素,而不是一次性将所有元素加载到内存中。如果输入的可迭代对象长度不一致,zip()会以最短的可迭代对象为准,只打包到最短对象的末尾。它可以用来并行迭代多个序列,使得代码更加简洁和高效。在接下来的章节中,我们将详细介绍。

Python老吕的博客 680

Python中使用SOAP消息:全面指南

)有时,你可能需要向SOAP请求中添加自定义的SOAP头。这可以通过Zeep的Client对象来实现。# 创建一个历史插件实例# 初始化客户端# 创建自定义的SOAP头header = {# 设置自定义头# 调用服务。

Bruce_xiaowei的博客 2082

如何调用 DBMS_DISKGROUP 对 ASM 文件进行随机读取

该篇博客介绍了如何通过 Java 调用 DBMS_DISKGROUP 读写 Oracle ASM 共享存储文件,并提供了 Java Demo。并测试出 DBMS_DISKGROUP 存在性能瓶颈。

我要出家当道士 1179

soap消息的解析

SOAP消息可以是XML文件,该文件中一定要包含SOAP Envelope(封装)和SOAPBody(体),而SOAP Header(头)则是可以选择性的。    SOAP消息包含下列各项:   ·Envelope是XML文件的顶层元素,代表该文件为SOAP消息。   ·Header提供了向SOAP消息中添加关于这条SOAP消息的某些要素(feature)的机制,不需要事先与商业伙伴建

yunuobuyoi的专栏 1368

C++设计模式之观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统,当一个对象(称为“主题”或“发布者”)改变状态时,所有注册的观察者都会收到通知。

每天进步一点点。 600

FPGA实践教程: 使用HLS将C程序生成IP核心进行FPGA开发

请根据您使用的FPGA开发板和供应商选择适当的HLS工具,并按照他们的安装指南进行安装。根据您使用的FPGA开发板和供应商选择适当的HLS工具,并按照他们的安装指南进行安装。通过本教程,您了解了如何使用HLS工具将C程序生成IP核心,并将其用于FPGA开发。在HLS项目中,您可以对C程序进行设计和优化,以生成对应的IP核心。在HLS项目中,您可以对C程序进行设计和优化,以生成相应的IP核心。将导出的IP核心导入到FPGA项目中。使用FPGA开发环境的菜单中的"导入"或"添加文件"选项导入IP核心。

CqpFsharp的博客 455
上一篇: 15 个常用的 SQL Server 高级语法
下一篇: 8个方法让你成为更优秀的程序员
UU_Yang
博客等级 码龄23年 926粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值