第七十七章 方法关键字 - SoapBindingStyle
指定此方法用作web方法
时使用的绑定样式或SOAP
调用机制。仅适用于定义为web服务
或web客户端
的类。
用法
若要重写方法使用的默认绑定样式(当它用作web方法
时),请使用以下语法:
Method name(formal_spec) As returnclass [ WebMethod, SoapBindingStyle = soapbindingstyle ]
{ //implementation }
其中soapbindingstyle
是下列之一:
-
document
文档(默认)—此web方法
使用文档样式的调用。
使用这种绑定风格,SOAP消息
被格式化为文档,并且通常只有一个部分。
在SOAP消息
中,<Body>
元素通常包含一个子元素。<Body>
元素的每个子元素对应于一个消息部分。
-
rpc
—这个web方法
使用rpc
(远程过程调用)风格的调用。
使用这种绑定风格,SOAP消息
被格式化为具有多个部分的消息。
在SOAP消息
中,<Body>
元素包含一个子元素,其名称取自相应的操作名称。这个元素是一个生成的包装元素,它为方法的参数列表中的每个参数包含一个子元素。
重要提示:对于手动创建的web服务
,该关键字的默认值通常是合适的。当使用SOAP
向导从WSDL
生成web客户端
或服务
时,InterSystems IRIS会将此关键字设置为适合该WSDL
;如果修改该值,web客户端
或服务可能不再工作。
详解
此关键字允许指定web方法
使用的绑定样式。它影响SOAP
主体的格式(但不影响任何SOAP
头)。
默认
如果省略此关键字,则<soap:operation>
元素的样式属性将改为由SoapBindingStyle
类关键字的值确定。
与WSDL的关系
SoapBindingStyle方法关键字指定了WSDL的<binding>部分中< soap:operation >元素的样式属性的值。例如,如果SoapBindingStyle方法关键字是document,则WSDL可能如下所示:
代码语言:javascript复制...
<binding ...>
...
<operation ...>
<soap:operation ... style="document"/>
...
相比之下,如果SoapBindingStyle
是rpc
,则WSDL
可以改为如下所示:
...
<binding ...>
...
<operation ...>
<soap:operation ... style="rpc"/>
...
绑定样式还会影响web方法
的请求和响应<message>
元素,如下所示:
= 如果绑定样式是文档,默认情况下,每条消息只有一个部分。例如:
代码语言:javascript复制<message name="AddSoapIn">
<part name="parameters" .../>
</message>
如果ARGUMENTSTYLE
参数是message
,那么一条消息可以有多个部分。例如:
<message name="AddSoapIn">
<part name="a" .../>
<part name="b" .../>
</message>
- 如果绑定样式是
rpc
,消息可以有多个部分。例如:
<message name="AddSoapIn">
<part name="a" .../>
<part name="b" .../>
</message>
与 %XML.DataSet 一起使用
如果将此关键字与使用 %XML.DataSet
类型的对象作为输入或输出的方法一起使用,则存在一些限制。
第七十八章 方法关键字 - SoapBodyUse
当此方法用作 Web方法
时,指定此方法的输入和输出使用的编码。仅适用于定义为 Web服务
或 Web客户端
的类。
用法
若要重写方法的输入和输出使用的默认编码(当它用作web方法
时),请使用以下语法:
Method name(formal_spec) As returnclass [ WebMethod, SoapBodyUse = soapbodyuse ]
{ //implementation }
其中soapbodyuse
是下列之一:
-
literal
文字(默认)-此web方法
使用文字数据。也就是说,SOAP消息
的<Body>
中的XML
与WSDL
中给出的模式完全匹配。 -
encoded
编码——这个web方法
使用SOAP
编码的数据。也就是说,SOAP消息
的<Body>
中的XML
使用了适合所使用的SOAP
版本的SOAP
编码,如以下规范所要求的:-
SOAP 1.1
(https://www.w3.org/TR/2000/NOTE-SOAP-20000508/) -
SOAP 1.2
(https://www.w3.org/TR/soap12-part2/)
-
重要提示:对于手动创建的web服务
,该关键字的默认值通常是合适的。当使用SOAP
向导从WSDL
生成web客户端
或服务时,InterSystems IRIS会将此关键字设置为适合该WSDL;如果修改该值,web客户端或服务可能不再工作。
详情
此关键字指定web方法
的输入和输出的编码。
默认
如果省略此关键字,将使用SoapBodyUse
类关键字的值。
与 %XML.DataSet 一起使用
如果将此关键字与使用 %XML.DataSet
类型的对象作为输入或输出的方法一起使用,则存在一些限制。
第七十九章 方法关键字 - SoapMessageName
指定此web方法
的响应消息的<part>
元素的name
属性。
仅适用于定义为web服务
或web客户端
的类。
用法
要覆盖响应消息的<part>
元素的默认名称,请使用以下语法:
Method name(formal_spec) As returnclass [ WebMethod, SoapMessageName = MyResponse ]
{ //implementation }
其中soapmessagename
是在XML
中有效的任何标识符。
详解
注意:此关键字仅对使用SoapBindingStyle
等于document
(这是默认设置)的web方法
有效。
此关键字指定响应消息正文的子元素的名称。
默认
如果省略此关键字,消息名称就是结尾附加了响应的web方法
的名称。
web方法
的名称取自web服务
中的web方法
定义;这只能通过重命名该方法来更改。
与WSDL的关系
SoapMessageName
关键字影响web服务
的WSDL
的<messages>
和<types>
部分。例如,以下web方法:
Method Add(a as %Numeric,b as %Numeric) As %Numeric [ SoapMessageName=MyResponseMessage,WebMethod ]
{
Quit a b
}
对于这个web服务
,WSDL的<types>
和<messages>
部分如下所示:
<types>
<s:schema elementFormDefault="qualified" targetNamespace="http://www.mynamespace.org">
<s:element name="Add">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" name="a" type="s:decimal"/>
<s:element minOccurs="0" name="b" type="s:decimal"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="MyResponseMessage">
<s:complexType>
<s:sequence>
<s:element name="AddResult" type="s:decimal"/>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</types>
<message name="AddSoapIn">
<part name="parameters" element="s0:Add"/>
</message>
<message name="AddSoapOut">
<part name="parameters" element="s0:MyResponseMessage"/>
</message>
默认情况下,如果方法没有指定SoapMessageName
关键字,AddSoapOut
消息将包含一个名为addressponse
的元素,而不是MyResponseMessa
注意,SoapMessageName
不影响响应消息的子元素(例如AddResult
)。
如果使用SOAP Wizard
从WSDL
生成web
服务或客户端,InterSystems IRIS将此关键字设置为适合该WSDL
的关键字。
对SOAP消息的影响
web服务
可能会发送如下响应消息:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Body>
<MyResponseMessage xmlns="http://www.mynamespace.org">
<AddResult>42</AddResult>
</MyResponseMessage>
</SOAP-ENV:Body>
默认情况下,如果该方法没有指定SoapMessageName
关键字,则<MyResponseMessage>
元素将改为<addressponse>
。
第八十章 方法关键字 - SoapNameSpace
指定web方法
使用的XML
命名空间。
仅适用于定义为web服务
或web客户端
的类。
用法
要覆盖方法使用的默认XML
命名空间(当该方法作为一个web方法
使用时),请使用以下语法:
Method name(formal_spec) As returnclass [ SoapNameSpace = "soapnamespace", WebMethod ]
{ //implementation }
其中soapnamespace
是一个命名空间URI
。
注意,如果URI
包含冒号(:
),则字符串必须用引号括起来。
也就是说,你可以使用以下方法:
Method MyMethod() [ SoapNameSpace = "http://www.mynamespace.org", WebMethod ]
或以下:
代码语言:javascript复制Method MyMethod() [ SoapNameSpace = othervalue, WebMethod ]
但不包括以下内容:
代码语言:javascript复制Method MyMethod() [ SoapNameSpace = http://www.mynamespace.org, WebMethod ]
重要提示:对于手动创建的web服务
,该关键字的默认值通常是合适的。
使用SOAP
向导从WSDL
生成web
客户端或服务时,InterSystems IRIS将此关键字设置为适合该WSDL
的关键字;
如果修改该值,web客户端
或服务可能不再工作。
详解
这个关键字指定了这个web方法
使用的XML
名称空间。
注意:这个关键字只有在方法使用rpc
样式绑定时才有效果。
也就是说,方法(或包含它的类)必须用SoapBindingStyle
等于rpc
来标记。
(如果为使用文档样式绑定的方法指定此关键字,则WSDL将不会是自一致的。)
默认
如果忽略此关键字,则该方法位于web服务
或客户端类的namespace
参数指定的名称空间中。
WSDL的关系
对于InterSystems IRIS web服务服务,SoapNameSpace
关键字影响<definitions>
元素中的名称空间声明。
这里添加了指定的名称空间(例如http://www.customtypes.org
)。
例如:
...
xmlns:ns2="http://www.customtypes.org"
xmlns:s0="http://www.wsns.org"
...
targetNamespace="http://www.wsns.org"
在本例中,http://www.customtypes.org
名称空间被分配给前缀ns2
。
请注意,WSDL
通常还声明了web服务
的名称空间(http://www.wsns.org
)。
在本例中,该名称空间被分配给前缀s0
,并且也用作目标名称空间。
对SOAP消息的影响
一个可能的SOAP消息
可能如下所示(为了可读性添加了换行符和空格):
<?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'
xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:tns='http://www.customtypes.org' >
<SOAP-ENV:Body SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<tns:AddResponse>
<AddResult>42</AddResult>
</tns:AddResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
注意,<addressponse>
元素位于http://www.webservicetypesns.org
名称空间中。
相反,如果我们没有指定SoapNameSpace
关键字,则消息将如下所示:
<?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'
xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:tns='http://www.wsns.org' >
<SOAP-ENV:Body SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<tns:AddResponse>
<AddResult>42</AddResult>
</tns:AddResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
在本例中,<addressponse>
元素位于web服务的名称空间http://www.wsns.org
中。