快速业务通道

SOAP协议初级指南 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
soap:Package)。这个属性被用于控制独立元素能在哪里被解码。SOAP序列化规则指出独立元素必须编码为soap:Header元素或soap:Body元素的直接子元素,或者是任何其它标记为soap:Package=‘true’的元素。通过把一个元素注释为包,你能保证编码那个实例的XML元素是完全自包含的,并且在这个包以外没有任何引用到这个元素的多引用存取元素。

假设transfer 类对应于一个方法请求。如果transfer类型不是一个包,被to和from存取元素引用的独立元素将作为soap:Body元素的直接子元素出现,如图10所示。如果transfer类型是一个合法的SOAP包类型,编码可能象图11所示。注意,因为transfer元素是一个包,所有多引用存取器元素都引用被包含的元素。这使得把transfer元素看成一个能从它的父辈元素中分离出的独立的XML代码段变得更为容易。

多引用存取元素总是引用独立元素的模型是有一个例外的。SOAP允许包含字符串和二进值数据的存取元素是多引用存取元素的目标。这意味着下面的代码是合法的:

<t:mytype> <field1 soap:href="http://cms.ddvip.com/index.php#id1" /> <field2 soap:id="id1">Hello, SOAP</field2> </t:mytype>

尽管事实是存取元素2有一个soap:id属性,它实际上是一个存取元素而不是独立元素。

SOAP协议初级指南(11)

时间:2010-12-10

SOAP数组

数组被编码为组合类型的一个特殊的例子。在SOAP中,一个数组必须有一个秩(维数)和一个容量。一个数组被编码为一个组合类型,其中每一个数组元素被编码为一个子元素,这个子元素的名字是元素的名域限制的类型名。

假设有下面的COM IDL类型定义:

struct POINTLIST { long cElems; [size_is(cElems)] POINT points[]; };

这个类型的实例将被序列化为:

<t:POINTLIST xmlns:t=‘uri for POINTLIST‘> <cElems>3</cElems> <points xsd:type=‘t:POINT[3]‘ > <POINT>lt;x>3</x>lt;y>4</y>lt;/POINT> <POINT>lt;x>7</x>lt;y>5</y>lt;/POINT> <POINT>lt;x>1</x>lt;y>9</y>lt;/POINT> </points> <t:POINTLIST>

如果points域被标记为[ptr]属性,这个编码将用一个多引用存取元素,如下所示:

<t:POINTLIST xmlns:t=‘uri for POINTLIST‘> <cElems>3</cElems> <points soap:href="http://cms.ddvip.com/index.php#x9" /> </t:POINTLIST> <t:ArrayOfPOINT soap:id=‘x9‘ xsd:type=‘t:POINT[3]‘> <POINT>lt;x>3</x>lt;y>4</y>lt;/POINT> <POINT>lt;x>7</x>lt;y>5</y>lt;/POINT> <POINT>lt;x>1</x>lt;y>9</y>lt;/POINT> </t:ArrayOfPOINT>

当把一个数组编码为一个独立元素时,标记名是带前缀ArrayOf的类型名。

象NDR和CDR一样,SOAP支持部分转换的数组。如果子元素的数量少于所声明的容量,这些元素被假设正从数组的末尾丢失。这能够通过在正包含的数组元素上使用soap:offset属性来被忽略。

<t:ArrayOfPOINT soap:id=‘x9‘ xsd:type=‘t:POINT[5]‘ soap:offset=‘[1]‘> <POINT>lt;x>1</x>lt;y>9</y>lt;/POINT> </t:ArrayOfPOINT>

soap:offset属性表示出现在数组中的第一个元素的索引。在上面的例子中,元素0,2到4都是不被转换的。SOAP也支持稀疏数组,这是通过使用soap:position属性来把每个元素用它的绝对索

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号