SOAP消息机制简介

简介:

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 消息。                                                 


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



本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2012/03/02/2376539.html,如需转载请自行联系原作者

目录
相关文章
|
网络协议 物联网 开发者
详细介绍 MQTT 的工作原理,包括 MQTT 协议的特点、核心概念以及消息传递的流程
详细介绍 MQTT 的工作原理,包括 MQTT 协议的特点、核心概念以及消息传递的流程
3739 1
|
9月前
|
XML JSON API
⚡REST 和 SOAP 协议有什么区别?
这篇文章对比了 REST 和 SOAP 两种常见的 Web API 规范。REST 是一种 API 架构风格,遵循客户端-服务器、无状态和缓存等原则,使用 HTTP 协议和 JSON 格式,适合轻量级、高兼容性的场景。SOAP 是一种基于 XML 的网络服务访问协议,提供消息级安全性和 ACID 合规性,适用于企业级应用。REST 的优点包括前后端分离、浏览器兼容和带宽效率,而 SOAP 适用于需要高级安全特性的应用。除了 REST 和 SOAP,还有 gRPC 和 GraphQL 等其他选择。
|
JSON API 网络架构
深度剖析 REST 内容协商
在 REST 架构中,内容协商(Content Negotiation)是一种机制,它可以使客户端和服务器之间协商确定传输的数据格式、编码方式、语言等内容。本文将详细介绍什么是 REST 内容协商,以及它的工作原理和应用场景。
|
Web App开发 JavaScript 前端开发
|
网络架构
消息(6)——WCF,构建简单的WCF服务,MTOM编码
构建一个简单的WCF服务。 以Web服务类似的步骤由IIS进行宿主服务。建立的步骤: 1 新建3.5网站 2 添加WCF服务,自动生成契约接口与实现,这里改动一下,添加个字串参数: [ServiceContract] public interface IFirstService {     [OperationContract]     void DoWork(string strContent); }   服务中的方法什么都不用做。
729 0
|
Java 网络架构
SOAP协议是RPC协议的升级版,出现了WSDL
背景 关于RPC协议的思考 RPC协议的组成部分 RPC协议=服务端+服务注册管理中心+客户端,构成客户端可远程调用服务端的方法,就跟调用本地方法一样方便。 Java实现RPC常用的框架RMI 服务注册管理中心常用的框架是ZooKeePer RPC服务端和客户端独立部署 RPC客户端必须包含服务端的接口类 RPC的限制 1、接口只能靠接口文档传递 2、传输内容的限制 SOAP协议 提供了WSDL标准,只需要访问服务地址,自动生成所有接口说明,方便统一 需要软件,朋友都找我。
992 0

热门文章

最新文章