soap的命名空间

来源:互联网 发布:南风知我意结局是什么 编辑:程序博客网 时间:2024/05/17 02:27

SOAP 命名空间 URI 要求
命名空间 URI 为给定的 SOAP 操作指定用于组成 SOAP 请求封装的 XML 命名空间。如果命名空间 URI 未被定义,将使用 URL 子句中的域组件。

服务器端的 SOAP 处理器使用此 URI 来了解请求的消息主体中各种实体的名称。CREATE PROCEDURE 和 CREATE FUNCTION 语句的 NAMESPACE 子句指定命名空间 URI。

在过程调用成功之前可能需要指定命名空间 URI。本信息通常在公共 Web 服务器文档中有所说明,但也可以从 Web 服务器上可用的 WSDL 中获得要求的命名空间 URI。在尝试与 SQL Anywhere Web 服务器通信时,可以通过访问 DISH 服务来生成 WSDL。

通常,可以从 WSDL 文档开头的 targetNamespace 属性中复制 NAMESPACE,该属性在 wsdl:definition 元素中指定。包含尾随的 “/” 时请务必谨慎,因为它们非常重要。第二,检查给定 SOAP 操作的 soapAction 属性。它应当和下面将要说明的生成的 SOAPAction HTTP 标头相对应。

NAMESPACE 子句满足两个函数。它为 SOAP 封装的主体指定了命名空间,并且如果过程指定了 TYPE ‘SOAP:DOC’,它将用作 SOAPAction HTTP 标头的域组件。

以下示例说明了 NAMESPACE 子句的用法:

选择示例文本; 按 Ctrl+C 拷贝到剪贴板 CREATE FUNCTION an_operation(a_parameter LONG VARCHAR)    RETURNS LONG VARCHAR    URL 'http://wsdl.domain.com/fictitious.asmx'    TYPE 'SOAP:DOC'    NAMESPACE 'http://wsdl.domain.com/'

在 Interactive SQL 中执行以下 SQL 语句:

提交  POST /fictitious.asmx HTTP/1.0SOAPAction: "http://wsdl.domain.com/an_operation"Host: wsdl.domain.comContent-Type: text/xmlContent-Length: 387Connection: close<?xml version="1.0"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://wsdl.domain.com/">  <SOAP-ENV:Body>   <m:an_operation>    <m:a_parameter>a_value</m:a_parameter>   </m:an_operation>  </SOAP-ENV:Body></SOAP-ENV:Envelope>

前缀 “m” 的命名空间设置为 http://wsdl.domain.com/ 且 SOAPAction HTTP 标头为 SOAP 操作指定一个完全限定的 URL。

尾随斜线并非 SQL Anywhere 进行正确操作所必需,但会导致一个难以诊断的响应失效。不论尾随斜线是否存在,都会正确生成 SOAPAction HTTP 标头。

如果未指定 NAMESPACE,将使用 URL 子句的域组件作为 SOAP 主体的命名空间,如果过程为 TYPE ‘SOAP:DOC’,它将用于生成 HTTP SOAPAction HTTP 标头。如果在上例中 NAMESPACE 子句被省略,将用 http://wsdl.domain.com 作为命名空间。细微差别在于不存在尾随斜线 “/”。该 SOAP 请求的其它任何方面,包括 SOAPAction HTTP 标头都将和上例相同。

NAMESPACE 子句用于为 SOAP 主体按照上面 SOAP:DOC 示例所述指定命名空间。然而,SOAPAction HTTP 标头生成时值为空:SOAPAction: “”

使用 SOAP:DOC 请求类型时,命名空间也用于组成 SOAPAction HTTP 标头。

原创粉丝点击