SOAP HTTP和RPC SOAP的案例分析


对于SOAP协议的内容,这次我们主要针对两方面讲解,一是SOAP HTTP的应用举例,另一方面是对RPC SOAP的相关内容的解析。下面我们就先来看看具体的SOAP HTTP举例。

使用POST的SOAP HTTP

  1. POST /StockQuote HTTP/1.1  
  2. Content-Type: text/xml; charset="utf-8" 
  3. Content-Length: nnnn  
  4. SOAPAction: "http://electrocommerce.org/abc#MyMessage"  
  5. <SOAP-ENV:Envelope... 
  6. HTTP/1.1 200 OK  
  7. Content-Type: text/xml; charset="utf-8" 
  8. Content-Length: nnnn  
  9. <SOAP-ENV:Envelope... 

使用扩展框架的SOAP HTTP

  1. M-POST /StockQuote HTTP/1.1  
  2. Man: "http://schemas.xmlsoap.org/soap/envelope/"; ns=NNNN 
  3. Content-Type: text/xml; charset="utf-8" 
  4. Content-Length: nnnn  
  5. NNNN-SOAPAction: "http://electrocommerce.org/abc#MyMessage"  
  6. <SOAP-ENV:Envelope... 
  7. HTTP/1.1 200 OK  
  8.  
  9. Ext:  
  10. Content-Type: text/xml; charset="utf-8" 
  11. Content-Length: nnnn  
  12. <SOAP-ENV:Envelope... 

以上就是SOAP HTTP的应用案例,我们就介绍到这里,下面我们来看看在RPC中使用SOAP的相关内容.

设计SOAP的目的之一就是利用XML的扩展性和灵活性来封装和交换RPC调用.这一节定义了远程过程调用和应答的统一表示形式.虽然可以预计到这种表示形式最可能被用于与之前定义的编码方式相结合,但也可能有其它的表示形式.SOAP的encodingstyle属性可以用来表明方法调用和应答都使用这一节所指定的表示方式.在RPC中使用SOAP和SOAP协议绑定是紧密相关的.在使用HTTP作为绑定协议时,一个RPC调用自然地映射到一个HTTP请求,RPC应答同样映射到HTTP应答.但是,在RPC中使用SOAP并不限于绑定HTTP协议.

要进行方法调用,以下的信息是必需的:

目标对象的URI

方法名

方法signature可选)

方法的参数

头数据可选)

SOAP依靠协议绑定提供传送URI的机制.例如,对HTTP来说,请求的URI指出了调用的来源 .除了必须是一个合法的URI之外,SOAP对一个地址的格式没有任何限制.

RPC和SOAP体

RPC方法调用和应答都包含在SOAP Body元素中,它们使用如下的表示形式:

一个方法调用用一个结构表示

一个方法调用被看作一个单个的结构,每个[in]和[in/out]参数有一个accessor.结构的名和类型与方法相同.每个[in]和[in/out]参数都被看作一个accessor,这个accessor的名和类型与参数的名和类型相对应.它们的出现顺序和方法中定义的参数顺序相同.

一个方法应答用一个结构表示.

一个方法应答被看作一个单个的结构,返回值和每个[in]和[in/out]参数有一个accessor.第一个accessor是返回值,之后是参数accessor,参数accessor的出现顺序和方法中定义的参数顺序相同.每个参数accessor的名称和类型与参数的名称和类型相对应.返回值accessor的名称并不重要.同样,结构的名称也不重要,不过,通常在方法名称的后面加上字符串"Response"作为结构的名称.

方法错误使用SOAP Fault元素表示.如果绑定的协议有额外的规则表示错误,则这些规则也必须要遵从.正如上面所述,方法调用和应答结构可以按照第5节中规则编码,或者用encodingstyle属性指定编码方式.应用程序可以处理缺少参数的请求,但是可能返回一个错误.因为返回结果表示调用成功,错误表示调用失败,所以,在方法应答中同时包含返回结果和错误是错误的.

RPC和SOAP头

在RPC编码中,可能会有与方法请求有关但不是正规的方法signature的附加信息.如果这样,它必须作为SOAP头元素的子元素.使用这种头元素的一个例子是在消息中传递事务ID.由于事务ID不是方法signature的一部分,通常由底层的组件而不是应用程序代码控制,所以没有一种直接的方法在调用中传递这个必要的信息.通过在头中添加一个给定名字的条目,接收方的事务管理器就可以析取这个事务ID,而且不影响远程过程调用的代码.

到这里我们就将SOAP HTTP和RPC中使用SOAP的相关内容介绍完了,希望对大家有所帮助。

相关内容

    暂无相关文章