快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
怎样映射一个SOAP请求和响应类型,考虑下列的数据类型:

struct withdraw { long account; float amount; };

这是一个所有的请求参数被打包成为一个单一的数据类型。同样下面的数据表示打包所有响应参数到一个单一的数据类型。

struct withdrawResponse { float newBalance; float amount; VARIANT_BOOL overdrawn; };

再给出下面的简单的Visual Basic程序,它使用了以前定义的Ibank接口:

Dim bank as IBank Dim amount as Single Dim newBal as Single Dim overdrawn as Boolean amount = 100 Set bank = GetObject("soap:http://bofsoap.com/am") overdrawn = bank.withdraw(3512, amount, newBal)

你能够想象底层的代理(可能是一个SOAP,DCOM,或IIOP代理)看上去象图8中所表示的那样。这里,在发送请求消息之前,参数被序列化成为一个请求对象。同样被响应消息接收到的响应对象被反序列化为参数。一个类似的转变同样发生在调用的服务器端。

当通过SOAP调用方法时,请求对象和响应对象被序列化成一种已知的格式。每个SOAP体是一个XML文档,它具有一个显著的称为<Envelope>的根元素。标记名<Envelope>由SOAP URI (urn:schemas-xmlsoap-org:soap.v1)来划定范围,所有SOAP专用的元素和属性都是由这个URI来划定范围的。SOAP Envelope包含一个可选的<Header>元素,紧跟一个必须的<Body>元素。<Body>元素也有一个显著的根元素,它或者是一个请求对象或者是一个响应对象。下面是一个IBank::withdraw请求的编码:

<soap:Envelope xmlns:soap=‘urn:schemas-xmlsoap-org:soap.v1‘> <soap:Body> <IBank:withdraw xmlns:IBank= ‘urn:uuid:DEADF00D-BEAD-BEAD-BEAD-BAABAABAABAA‘> <account>3512</account> <amount>100</amount> </IBank:withdraw> </soap:Body> </soap:Envelope>

下列响应消息被编码为:

<soap:Envelope xmlns:soap=‘urn:schemas-xmlsoap-org:soap.v1‘> <soap:Body> <IBank:withdrawResponse xmlns:IBank= ‘urn:uuid:DEADF00D-BEAD-BEAD-BEAD-BAABAABAABAA‘> <newBalance>0</newBalance> <amount>5</amount> <overdrawn>true</overdrawn> </IBank:withdrawResponse> </soap:Body> </soap:Envelope>

注意[in, out]参数出现在两个消息中。

在检查了请求和响应对象的格式后,你可能已经注意到序列化格式通常是:

<t:typename xmlns:t=‘namespaceuri‘> ; <fieldname1>field1value</fieldname1> <fieldname2>field2value</fieldname2> </t:typename>

SOAP协议初级指南(7)

时间:2010-12-10

在请求的情况下,类型是隐式的C风格的结构,它由对应方法中的[in]和[in, out]参数组成。对响应来说,类型也是隐式的C风格的结构,它由对应方法中的[out]和[in, out]参数组成。这种每个域对应一个子元素的风格有时被称为元素正规格式(ENF)。一般情况下,SOAP只用XML特性来传达描述包含在元素内容中信息的注释。

象DCOM和IIOP一样,SOAP支持协议头扩展。SOAP用可选的<Header>元素来传载被协议扩展所使用的信息。如果客户端的SOAP软件包含要发送头信息,原始的请求将可能如图9所示。在这种情况下命名causality的头将与请求一起序列化。收到请求后,服务器端软件能查看头的名域URI,并处理它识别出的头扩展。这个头扩展被http://comstuff.com URI识别,并期待一个如下的对象:

struct causality { UUID id; };

在这种情况下的请

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号