类关键字PropertyClass,ServerOnly,Sharded,SoapBindingStyle

2022-07-06 10:39:58 浏览数 (1)

第二十九章 类关键字 - PropertyClass

向该类添加属性参数。

用法

要向该类添加属性参数,请使用以下语法:

代码语言:javascript复制
Class PropClass.MyClass Extends %RegisteredObject [ PropertyClass = PropClass.MyPropertyClass ] { //class members }

其中·propertyclasslist·是下列之一:

代码语言:javascript复制
[ PropertyClass = PropClass.MyPropertyClass ]
  • 用逗号分隔的类名列表,用括号括起来。

详情

如果需要添加自定义属性参数,请执行以下操作:

  1. 定义并编译一个定义一个或多个类参数的类。例如:
代码语言:javascript复制
Class PropClass.MyPropertyClass
{

Parameter MYPARM As %String = "XYZ";

}

这些类参数在下一步中成为属性参数。

  1. 在定义属性的类中,指定PropertyClass关键字。

对子类的影响

子类继承这个关键字添加的自定义行为。如果子类为关键字指定了一个值,则该值会指定一个或多个为该类的属性指定参数的附加类。

第三十章 类关键字 - ServerOnly

指定此类是否被投影到Java客户端。

用法

要覆盖将类投影到Java客户端的默认方式,请使用以下语法:

代码语言:javascript复制
Class Sample.NewClass1  [ ServerOnly = serveronlyvalue ] { //class members }

其中serveronlyvalue是以下值之一:

  • 0表示可以投影此类。
  • 1表示这个类不会被投影。

详解

如果该关键字为1,则该类不会被投影到Java客户端。如果该关键字为0,则将投影该类。

对子类的影响

此关键字不是继承的。

默认

如果省略这个关键字,这个类如果不是存根就会被投影(但是如果是存根就不会被投影)。

第三十一章 类关键字 - Sharded

指定此类是否被分片。仅适用于包含分片集群的环境中的持久类。

用法

要将类定义为分片类,请使用以下语法:

代码语言:javascript复制
Class MyApp.MyClass Extends %Persistent [ Sharded = 1 ]  
{ //class members }

否则,省略此关键字。

详解

分片是一种水平扩展数据存储的机制。如果一个类被分片,该类的实例将分布在分片集群中任何已定义的数据节点上。

如果有一个分片环境,并且将一个类定义为未分片,那么该类的实例只存储在第一个数据节点上,尽管所有节点都可以看到该数据。

对子类的影响

这个关键字是继承的。

默认

如果省略这个关键字,类就不会被分割。

第三十二章 类关键字 - SoapBindingStyle

指定此类中定义的任何web方法使用的绑定样式或SOAP调用机制。仅适用于定义为web服务或web客户端的类。

用法

要指定此类中定义web method使用的绑定样式,请使用以下语法:

代码语言:javascript复制
Class MyApp.MyClass [ SoapBindingStyle = soapbindingstyle ]  { //class members }

其中soapbindingstyle是下列之一:

  • document 文档(默认)—默认情况下,此类中的web method使用文档样式的绑定。

使用这种绑定风格,SOAP消息被格式化为文档,并且通常只有一个部分。

SOAP消息中,<Body>元素通常包含一个子元素。<Body>元素的每个子元素对应于一个消息部分。

  • rpc —默认情况下,此类中的web method使用rpc(远程过程调用)样式的绑定。

使用这种绑定风格,SOAP消息被格式化为具有多个部分的消息。

SOAP消息中,<Body>元素包含一个子元素,其名称取自相应的操作名称。这个元素是一个生成的包装元素,它为方法的参数列表中的每个参数包含一个子元素。

如果SoapBindingStyle是文档,如果ARGUMENTSTYLE是消息,那么消息样式与RPC非常相似;

重要提示:对于手动创建的web service,该关键字的默认值通常是合适的。当使用SOAP向导从WSDL生成web客户端或服务时,InterSystems IRIS会将此关键字设置为适合该WSDL;如果修改该值,web客户端或服务可能不再工作。

详解

此关键字允许指定此类中定义的任何web method使用的默认绑定样式。它影响SOAP主体的格式(但不影响任何SOAP头)。

通过使用SoapBindingStyle方法关键字或SoapBindingStyle查询关键字,可以重写单个方法的绑定样式。

对子类的影响

此关键字不是继承的。

默认

默认值为文档。

与WSDL的关系

SoapBindingStyle类关键字指定了WSDL<binding>部分中<soap:binding>元素的样式属性的值。例如,如果SoapBindingStyle是文档,则WSDL可能如下所示:

代码语言:javascript复制
...
<binding ...>
    <soap:binding ... style="document"/>
    <operation ...>
        <soap:operation ... style="document"/>
...

如这里所示,在WSDL<binding>部分中,SoapBindingStyle类关键字还指定了<soap:operation>元素的样式属性的默认值;该属性由SoapBindingStyle方法关键字进一步控制。

相比之下,如果SoapBindingStylerpc,则WSDL可以改为如下所示:

代码语言:javascript复制
...
<binding ...>
    <soap:binding ... style="rpc"/>
    <operation ...>
        <soap:operation ... style="rpc"/>
...

绑定样式也会影响<message>元素,如下所示:

  • 如果绑定样式是文档,默认情况下,消息只有一个部分。例如:
代码语言:javascript复制
<message name="AddSoapIn">
    <part name="parameters" .../>
</message>

如果ARGUMENTSTYLE参数是message,那么一条消息可以有多个部分。例如:

代码语言:javascript复制
<message name="AddSoapIn">
   <part name="a" .../>
   <part name="b" .../>
</message>
  • 如果绑定样式是rpc,消息可以有多个部分。例如:
代码语言:javascript复制
<message name="AddSoapIn">
    <part name="a" .../>
    <part name="b" .../>
</message>

对SOAP消息的影响

SOAP消息的主要影响是控制SOAP主体是否可以包含多个子元素。

对于使用RPC样式绑定和编码样式消息的web method,下面显示了请求消息正文的示例:

代码语言:javascript复制
<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的请求消息正文的示例:

代码语言:javascript复制
<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, 类型的对象,并非所有 SoapBindingStyleSoapBodyUse 关键字的排列都是允许的,,如下表总结:

type

supported?

supported?

SoapBodyUse=literal(默认)

SoapBodyUse=encoded

SoapBindingStyle=document(default)

supported

not supported

SoapBindingStyle=rpc

supported

supported

0 人点赞