SOAP服务器如何确定它应该执行哪个操作?

时间:2014-11-04 21:37:28

标签: xml web-services soap wsdl w3c

我想问一下SOAP请求的Body元素到底应该是什么。我认为它应该是一个定义我想要调用的操作名称的元素。我还假设在这个元素中应该有一个与该操作的输入参数相对应的结构。

但是,如果我采用以下WSDL:http://adisrws.mfcr.cz/adistc/axis2/services/rozhraniCRPDPH.rozhraniCRPDPHSOAP并让SoapUI生成getStatusNespolehlivyPlatce操作的请求,请求的内容将是:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:roz="http://adis.mfcr.cz/rozhraniCRPDPH/">
<soapenv:Header/>
<soapenv:Body>
  <roz:StatusNespolehlivyPlatceRequest>
     <roz:dic>00247618</roz:dic>
  </roz:StatusNespolehlivyPlatceRequest>
</soapenv:Body>
</soapenv:Envelope>

<soapenv:Body>中没有操作的名称(getStatusNespolehlivyPlatce),而是getStatusNespolehlivyPlatce操作的相应输入参数的名称。 SOAP服务器如何发现我正在调用getStatusNespolehlivyPlatce操作?

  1. 服务器是否使用HTTP SOAPAction标头来确定此问题? (在这种情况下是:SOAPAction:“http://adis.mfcr.cz/rozhraniCRPDPH/getStatusNespolehlivyPlatce”)

  2. 服务器是否仅从底层WSDL和SOAP请求推断操作(即不查看HTTP头)?

  3. 如果我(从服务器提供商的角度来看)决定不使用SOAPAction HTTP标头,那么根据W3C标准,SOAP请求应该如何?

  4. SOAPAction标头的使用是否是强制性的,并且它只是简化防火墙工作的信息,因此他们不必解析有关操作的信息从XML请求中请求?

  5. 感谢您的时间。

1 个答案:

答案 0 :(得分:1)

如果我举例说明Axis2 Framework,它使用以下步骤来识别服务操作。详情请见以下网址

http://wso2.com/library/176/

  • HTTP请求uri
  • 的SOAPAction
  • SOAP Body元素的第一个子元素的QName
  • 如果启用了WS-Addressing,则为EPR(端点引用)和Action元素
  • 的地址