`
ossd_小羊
  • 浏览: 30594 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

SOAPAction是什么

阅读更多
SOAPAction是什么?
最近在工作中遇到一个SOAP Action的问题,正好拿出来研究一把。
  据说SOAPAction header这玩意在SOAP 1.1规范中着实让不少开发者喝了一壶。真的有这么难理解么?我想这应该是因为SOAP有两种非常不同的使用方式,而SOAPAction主要是被用来支持其中应用较少的一种方式的原因。在我看来,这种方式也非常有价值。

  让我们先看看SOAP 1.1规范是怎么定义HTTP SOAPAction header的:

  SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAPAction HTTP request header。

  SOAPAction header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAPAction header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地。

  看了官方的定义,相信大家也迷糊了,迷糊在“目的地”这个词上吧?那么,给它一个准确的说法吧——“确定执行某一行为的路径”。

  看一个SOAP消息的例子:

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
       <m:GetLastTradePrice xmlns:m="Some-URI">
           <symbol>XYS</symbol>
       </m:GetLastTradePrice>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
  很明显的,这条消息指明了要去执行服务端的“GetLastTradePrice”这个方法,开发者不会对此没有疑问,这样看来,SOAP Action也许显得多余了?

  然而,在另一种SOAP消息的发送场景中,却少不了SOAP Action。在这种场景中,SOAP消息并没有显示的指定要调用的服务方法名,而是利用底层的传输协议发送(这样的话,一般会被Web services忽视),例如使用HTTP的Post方式发送的SOAP消息。

  拿AWT组件容器来举个例子吧,我们知道有很多AWT容器,例如:Panel,Box,Window等等,很多情况下,开发者知道他们创建的泛型容器对象下真正是什么对象。那么,假设下面两段代码里的java.awt.Container对象其实是一个Box吧:

  1.

  comp = new TextField( "test" );
  java.awt.Container c = Foo.bar();
  c.add( comp );

  2.

  comp = new TextField( "test" );
  java.awt.Container c = Foo.bar();
  ((java.awt.Panel)c).add( comp );

  以上两段代码产生两种不同的结果。“add()”方法对两者似乎有着相同的意义,但是在代码2中其被扩展为“作为一个Panel对象去add”。所以很明显的,代码2会抛出一个异常,因为我们知道这个对象实际上是Box,而我们的代码期待的是Panel。

  HTTP POST的意义正如这个例子中的“add()”方法一样,HTTP POST提供一个关于SOAPAction如何被使用的索引;而SOAPAction header的值则应该被用来指明这个“扩展”的目的地——这条SOAP/HTTP消息发送者所期待的处理容器的名称(可以这样理解:即相应的API方法)。那么,正如上面那个AWT例子一样,如果这种期待没有被满足,就会产生一个错误。

  注意:在SOAP 1.2规范中,SOAPAction header这个属性被"action"所取代,但其作用和工作原理都没有变化。

  有意思的是,在Tibco的EAI工具BW中,使用SOAP服务端活动必须指定SOAP Action属性,如果引用的原始WSDL没有使用这个属性的话,也必须显示的指明;因此,相应的,其客户端也要注意啦——必须为SOAP Action属性填入期待的URI。

分享到:
评论

相关推荐

    java调用.net发布的webservice(asmx)

    本文将详细讲解如何使用Java调用.NET发布的Web Service(ASMX),并解决在此过程中可能出现的SOAPAction报错和“Server not identified”错误。 首先,我们需要了解ASMX。ASMX是.NET Framework早期版本中用于创建...

    soap1.1和soap1.2区别

    其次,SOAP 1.2 不再使用 SOAPAction 报头行。SOAPAction 报头行是 SOAP 1.1 中用来指定操作的 URI 的,例如 "http://xmlme.com/WebServices/GetSpeech"。而在 SOAP 1.2 中,这个信息被移到了 SOAP 消息的体中去了。...

    soap接口的描述与简单应用

    3. **SOAP Action**:在HTTP协议中,SOAP Action是一个HTTP头部字段,指明了SOAP消息中要执行的操作。 4. **WSDL(Web Services Description Language)**:这是一个XML格式的规范,用于描述SOAP服务的接口,包括...

    .NET 访问JAVA的WEBSERVICE使用SOAP头

    本文将深入探讨如何在.NET应用中访问Java的WebService,并通过SOAP头进行身份验证的过程,这一过程对于实现安全的跨平台通信至关重要。 ### 1. SOAP头在Web服务中的作用 SOAP(Simple Object Access Protocol)是...

    java调用soap接口案例

    3. **构建SOAP请求**:首先,我们需要了解SOAP服务的WSDL(Web Service Description Language)文档,从中可以获取服务的地址、端点以及方法的SOAP Action。然后,我们可以使用`SOAPMessage`对象来创建请求的XML结构...

    SOAP 的简要 描述

    SOAPAction是HTTP头中的一个常见字段,指示了请求的特定操作。当SOAP绑定到HTTP时,它利用HTTP的特性,如请求/响应模式,但不改变HTTP的基本语义。 **SOAP消息格式** SOAP消息通常遵循以下结构: ```xml <SOAP-...

    SOAP

    - **SOAP Action**:标识SOAP请求的特定操作。 - **WSDL**:用于服务描述,是SOAP服务的核心元数据。 - **JAX-RPC和JAX-WS**:Java中处理SOAP的API,JAX-RPC是早期版本,JAX-WS是其后续的、更现代的替代品,两者都...

    soap白皮书 TXT格式

    例如,`SOAPAction`头部字段用于指示所调用的Web服务操作名称。 #### 六、SOAP与HTTP的结合实例 示例1展示了SOAP消息通过HTTP协议发送的具体格式。其中,`POST /StockQuote HTTP/1.1`行指明了请求的方法和资源路径...

    soap协议规范.pdf

    其中,`SOAPAction`头部用于指定请求的操作类型,而消息体则包含了具体的请求参数。 #### 六、总结 综上所述,SOAP协议作为一种基于XML的标准化通信协议,通过其封装、编码规则及RPC表示等关键部分,为分布式环境...

    soap协议规范 soap协议规范

    SOAP消息通常通过HTTP POST方法发送,HTTP头中包含了SOAPAction,用于标识调用的服务操作。 在SOAP消息中,XML名域被用来区分SOAP元素和应用程序特定的元素。例如,`SOAP-ENV`前缀通常与`...

    SOAP模拟器 彩信接收模拟器

    4. **SOAP Action头**:HTTP请求中包含的SOAP Action头指定了要执行的操作,确保正确设置此头以匹配你的服务。 5. **MMS协议**:理解MMS协议的工作原理,包括如何封装多媒体内容、地址信息和消息格式,这对于正确...

    Soap请求网络数据

    2. **发起HTTP POST请求**: 使用`NSURLSession`或第三方库,设置HTTP的POST请求,将SOAP消息作为请求体,指定SOAPAction头和Content-Type头。 3. **接收响应**: 当请求完成时,会回调代理方法,接收到的响应数据...

    基于soap协议的post请求

    request.addValue("http://tempuri.org/Add", forHTTPHeaderField: "SOAPAction") let soapMessage = """ <soap:Envelope xmlns:soap=...

    SOAP1.2协议规范

    在SOAP1.2中,"SOAPAction" HTTP头字段被用来指示消息的目的。这有助于服务器识别并执行相应的操作。 4. **错误处理** SOAP1.2引入了更明确的错误处理机制。当处理消息时遇到问题,服务器可以返回一个SOAP错误,...

    soap-builder.jar,工具包,可解析wsdl

    optMap.put("soapAction", soapAction==null?"":soapAction); optMap.put("requestMsg", requestMsg); optMap.put("responseMsg", responseMsg); optList.add(optMap); }catch (Exception e) { } } bind...

    soap请求的工具

    1. **创建SOAP请求**:输入服务的URL,选择合适的SOAP动作(Action),并在Body部分编写XML请求内容。这可以手动完成,也可以通过导入WSDL文件自动完成。 2. **发送请求**:点击发送按钮后,工具会将构造好的SOAP...

    SOAP协议最新规范文档

    POST请求包含了SOAP消息,HTTP头部指定了消息类型(Content-Type)为XML,并且通过SOAPAction头指明了调用的特定服务。SOAP消息体中包含了方法调用(GetLastTradePrice)和参数(symbol),而在响应中,SOAP消息携带...

    android请求webservice需要的soap工具封装

    public static String executeSoapRequest(String soapAction, String url, String namespace, String... properties) throws IOException { SoapObject request = initSoap(soapAction, url, namespace); for ...

    soap规范web service调用

    SOAPAction: "Some-URI" DIS ``` 2. **SOAP响应消息:** ```xml HTTP/1.1 200 OK Content-Type: text/xml;charset="utf-8" Content-Length: nnnn 34.5 ``` #### 四、SOAP的关键概念 1. **SOAP...

    D6 SOAP_WEB SERVICE DELPHI SOAP

    在服务器端,我们需要将`TSoapServer`组件与`IMyWebService`接口关联,并设置适当的属性,如SOAPAction,以处理HTTP请求。客户端则可以通过`TSoapClient`组件调用远程服务,就像调用本地方法一样。 标签"SOAP ...

Global site tag (gtag.js) - Google Analytics