类关键字PropertyClass,ServerOnly,Sharded,SoapBindingStyle
rpc—默认情况下,此类中的web method使用rpc(远程过程调用)样式的绑定。
使用这种绑定风格,SOAP消息被格式化为具有多个部分的消息。
在SOAP消息中,元素包含一个子元素,其名称取自相应的操作名称。这个元素是一个生成的包装元素,它为方法的参数列表中的每个参数包含一个子元素。
如果SoapBindingStyle是文档,如果ARGUMENTSTYLE是消息,那么消息样式与RPC非常相似;
重要提示:对于手动创建的web service,该关键字的默认值通常是合适的。当使用SOAP向导从WSDL生成web客户端或服务时,InterSystems IRIS会将此关键字设置为适合该WSDL;如果修改该值,web客户端或服务可能不再工作。
详解
此关键字允许指定此类中定义的任何web method使用的默认绑定样式。它影响SOAP主体的格式(但不影响任何SOAP头)。
通过使用SoapBindingStyle方法关键字或SoapBindingStyle查询关键字,可以重写单个方法的绑定样式。
对子类的影响
此关键字不是继承的。
默认
默认值为文档。
与WSDL的关系
SoapBindingStyle类关键字指定了WSDL的部分中元素的样式属性的值。例如,如果SoapBindingStyle是文档,则WSDL可能如下所示:
...
<binding ...>
<soap:binding ... style="document"/>
<operation ...>
<soap:operation ... style="document"/>
...
如这里所示,在WSDL的部分中,SoapBindingStyle类关键字还指定了元素的样式属性的默认值;该属性由SoapBindingStyle方法关键字进一步控制。
相比之下,如果SoapBindingStyle是rpc,则WSDL可以改为如下所示:
...
<binding ...>
<soap:binding ... style="rpc"/>
<operation ...>
<soap:operation ... style="rpc"/>
...
绑定样式也会影响元素,如下所示:
- 如果绑定样式是文档,默认情况下,消息只有一个部分。例如:
<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>
对SOAP消息的影响
对SOAP消息的主要影响是控制SOAP主体是否可以包含多个子元素。
对于使用RPC样式绑定和编码样式消息的web method,下面显示了请求消息正文的示例:
<SOAP-ENV:Body SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<types:Add>
<a href="#id1" /><b href="#id2" />
</types:Add>
<types:ComplexNumber id="id1" xsi:type="types:ComplexNumber">
<Real xsi:type="s:double">10</Real>
<Imaginary xsi:type="s:double">5</Imaginary>
</types:ComplexNumber>
<types:ComplexNumber id="id2" xsi:type="types:ComplexNumber">
<Real xsi:type="s:double">17</Real>
<Imaginary xsi:type="s:double">2</Imaginary>
</types:ComplexNumber>
</SOAP-ENV:Body>
相比之下,下面显示了使用文字绑定和编码样式消息的web method的请求消息正文的示例:
<SOAP-ENV:Body>
<tns:Add>
<tns:a xsi:type="tns:ComplexNumber">
<Real xsi:type="s:double">10</Real>
<Imaginary xsi:type="s:double">5</Imaginary>
</tns:a>
<tns:b xsi:type="tns:ComplexNumber">
<Real xsi:type="s:double">17</Real>
<Imaginary xsi:type="s:double">2</Imaginary>
</tns:b>
</tns:Add>
</SOAP-ENV:Body>
在这种情况下,SOAP主体只有一个子元素。
与 %XML.DataSet 一起使用
对于 %XML.DataSet, 类型的对象,并非所有 SoapBindingStyle 和 SoapBodyUse 关键字的排列都是允许的,,如下表总结:
| type | supported? | supported? |
|---|---|---|
| 空 | SoapBodyUse=literal(默认) | SoapBodyUse=encoded |
| SoapBindingStyle=document(default) | supported | not supported |
| SoapBindingStyle=rpc | supported | supported |