zl程序教程

您现在的位置是:首页 >  后端

当前栏目

第八十一章 方法关键字 - SoapRequestMessage

方法 关键字 第八
2023-09-11 14:15:36 时间

文章目录

第八十一章 方法关键字 - SoapRequestMessage

当多个web方法具有相同的SoapAction时使用此方法。
在默认场景中,该关键字指定请求消息的SOAP正文中的顶级元素的名称。
仅适用于定义为web服务web客户端的类。

用法

要在请求消息的SOAP体中指定顶级元素的名称,请使用以下语法:

Method name(formal_spec) As returnclass [ WebMethod, SoapAction = "MyAct", SoapRequestMessage="MyReqMessage" ] 
{    //implementation }

其中soaprequestmessage是有效的XML标识符。

详解

注意:此关键字仅对包装的文档/文字document/literal消息有效。

对于包装的文档/文字消息,该关键字指定请求消息的SOAP主体中的顶部元素的名称。(默认情况下,包装文档/文字消息。

如果对同一web服务中的多个web方法使用相同的SoapAction值,请指定此关键字。否则,一般不需要这个关键字。

与WSDL的关系

SoapRequestMessage关键字影响web服务WSDL<Message>部分。例如,考虑以下web方法:

Method Add(a as %Numeric,b as %Numeric) As %Numeric [ SoapAction = MyAct,SoapRequestMessage=MyReqMessage, WebMethod ]
{
    Quit a + b
}

对于这个web服务,WSDL包含以下内容:

<message name="AddSoapIn">
   <part name="parameters" element="s0:MyReqMessage"/>
</message>
<message name="AddSoapOut">
   <part name="parameters" element="s0:AddResponse"/>
</message>

这些元素在<types>部分中相应地定义。

默认情况下,如果方法没有指定SoapRequestMessage关键字,<message>部分将改为如下所示:

<message name="AddSoapIn">
   <part name="parameters" element="s0:Add"/>
</message>
<message name="AddSoapOut">
   <part name="parameters" element="s0:AddResponse"/>
</message>

如果使用SOAP向导从WSDL IRIS web服务或客户端, IRIS将此关键字设置为适合该WSDL的。

对Message的影响

对于前面显示的web方法web服务需要以下形式的请求消息:

<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
 xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:s='http://www.w3.org/2001/XMLSchema'>
  <SOAP-ENV:Body>
    <MyReqMessage xmlns="http://www.myapp.org"><a>1</a><b>2</b></MyReqMessage>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

相反,如果该方法没有指定SoapRequestMessage关键字,则该消息将如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
 xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:s='http://www.w3.org/2001/XMLSchema'>
  <SOAP-ENV:Body>
    <Add xmlns="http://www.myapp.org"><a>1</a><b>2</b></Add>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>