SOAP 请求消息结构

如果希望 SOAP 客户端生成自己的 SOAP 请求,而不是使用 Visual Studio 2005 提供的代理类,则必须使用下列消息格式。

存储过程和用户定义类型的 SOAP 请求消息格式

下面的示例显示了发送到 SQL Server 2005 实例的一个典型 SOAP 请求。在 SOAP 消息中请求了 GetCustomerInfo 操作。请注意,只会显示 HTTP 标头的一部分。

POST /url HTTP/1.1
Host: HostServerName
Content-type: text/xml; charset=utf-8
Content-length: 350
SoapAction: http://tempUri.org/GetCustomerInfo
...

<?xml version="1.0" encoding="utf-8" ?> 
<soap:Envelope 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
   <GetCustomerInfo xmlns="http://tempUri.org/">
<CustomerID>1</CustomerID> 
<OutputParam /> 
  </GetCustomerInfo>
</soap:Body>
</soap:Envelope>

HTTP 标头

在前面的代码中,SoapAction HTTP 标头字段的值是其命名空间后面的方法名称。此值与添加到端点(使用 CREATE ENDPOINT 创建的)的方法和命名空间相同。请注意,这是一个可选字段。Host HTTP 标头字段标识接收 HTTP 请求的服务器。

<soap:Envelope> 元素

SOAP 请求的详细信息包含在 SOAP 信封的 <Body> 元素中。上面的示例请求了 GetCustomerInfo 方法。<GetCustomerInfo> 中的 xmlns 属性与为此方法指定的命名空间相同,此方法是使用 CREATE ENDPOINT 创建端点的方法。有关存储过程和命名空间的详细信息,请参阅用于发送本机 XML Web 服务请求的示例应用程序。下列方法参数将作为 <GetCustomerInfo> 元素的子元素传入:

  • 值为 1<CustomerID> 元素是输入参数。
  • <OutputParam> 元素是输出参数。

输入参数处理

输入参数的处理方法如下:

  • 如果 SOAP 方法需要输入参数,并且此参数未包含在 SOAP 请求中,则不会有任何值传入调用的存储过程。此时将执行存储过程中定义的默认操作。

  • 如果 SOAP 方法需要输入参数,并且此参数包含在请求中但未赋值,则该参数将用一个空字符串作为其值传入存储过程。请注意,该值不是 NULL。

  • 如果 SOAP 操作需要输入参数,并且您要为此参数发送 NULL 值,则必须在 SOAP 请求中将 xsi:nil 属性设置为 "true"。例如:

    <GetCustomerInfo xmlns="http://tempUri.org/" >
      <CustomerID xsi:nil="true" />
      <OutputParam />
    </GetCustomerInfo>
    

    在 Visual Studio 2005 中,将 NULL 值传入字符串变量时,将在 SOAP 请求中生成 xsi:nil="true" 属性。但是,为类型为 integerfloat类型(值类型)的参数传递 NULL 值时,Visual Studio 2005 不会生成 xsi:nil="true" 属性,而是为这些参数提供默认值。例如,为 integer 类型的参数提供 0,为 float 类型的参数提供 0.0,等等。因此,如果要将 NULL 值传入这些类型的参数,必须使用 xsi:nil="true" 属性在应用程序中生成 SOAP 消息。有关详细信息,请参阅本机 XML Web 服务的指导原则和限制

  • 您可以为参数指定几个方面。本主题后面显示了一个表,其中列出了在请求即席 SQL 查询时可以指定的几个方面。在此表中,可以为 <Value> 节点指定的所有方面均可以对 RPC 方法参数节点指定。

请求即席 SQL 查询时的 SOAP 请求消息格式

为执行即席 SQL 查询发送 SOAP 请求时,必须调用 sqlbatch 方法并传递查询以及可能需要的所有参数。

在下面的示例中,HTTP SOAP 请求调用了 sqlbatch 方法。请注意,只会显示 HTTP 标头的一部分。

POST /url HTTP/1.1
Host: HostServerName
Content-type: text/xml; charset=utf-8
Content-length: 656
SoapAction: https://schemas.microsoft.com/sqlserver/2004/SOAPsqlbatch
...

<?xml version="1.0" encoding="utf-8" ?> 
 <soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
 <sqlbatch xmlns="https://schemas.microsoft.com/sqlserver/2004/SOAP">
<BatchCommands>
SELECT EmployeeID, FirstName, LastName 
FROM Employee 
WHERE EmployeeID=@x 
FOR XML AUTO;
</BatchCommands> 
<Parameters>
   <SqlParameter Name="x" SqlDbType="Int" MaxLength="20" 
   xmlns="https://schemas.microsoft.com/SQLServer/
    2001/12/SOAP/types/SqlParameter">
  <Value xsi:type="xsd:string">1</Value> 
   </SqlParameter>
</Parameters>
  </sqlbatch>
  </soap:Body>
  </soap:Envelope>

HTTP 标头

在 HTTP 标头中,请注意 SoapAction HTTP 标头字段值为客户端用于指定 SQL 查询的方法名 (sqlbatch)。请注意,此标头是可选的。

<soap:Envelope> 元素

SOAP 请求详细信息显示在 <Body> 元素中。SOAP <Body> 元素只有一个子元素 (<sqlbatch>),用于标识所请求的方法。在元素中标识的命名空间是定义 sqlbatch 操作的位置。此元素有下列子元素:

  • <BatchCommands> 元素指定要执行的单个查询或多个查询(由分号 ; 分隔)。
  • <Parameters> 元素提供了可选参数列表。在上面的示例请求信封中,只有一个参数传入了查询。每个参数都作为 <Parameters> 元素的一个 <SqlParameter> 子元素添加到 SOAP 消息中。在传递参数时,必须至少传递参数名称(<SqlParameter> 元素的 Name 属性)和参数值(<SqlParameter> 元素的 <Value> 子元素)。

为了避免发生意外转换,请提供尽可能多的参数信息。下表列出了可以为 <SqlParameter> 元素指定的其他参数方面。您也可以为 <Value> 元素指定其中的某些方面。

对于可以对 <SqlParameter><Value> 元素指定的方面,在指定 <Value> 元素时,这些方面必须位于 https://schemas.microsoft.com/sqlserver/2004/sqltypes 命名空间中,如下面的示例所示:

<Value xsi:type="xsd:string" sqltypes:maxLength="100" xmlns:sqltypes="https://schemas.microsoft.com/sqlserver/2004/sqltypes">1</Value>
参数方面 注释 可以指定的节点

direction

指定参数方向(InputInputOutput)。默认值为 Input

<SqlParameter>

localeID

定义字符类型排序规则的 Windows 区域设置。等于 COLLATIONPROPERTY 内部返回的 LCID 值。

<SqlParameter>

<Value>

maxLength

<SqlParameter> 元素属性提供了参数值的最大长度。默认值为 1。

<SqlParameter>

<值>

name

<SqlParameter> 元素属性提供了参数名。

<SqlParameter>

outputRequested

可以应用到参数元素,以指示是否应该发出输出。默认行为取决于所使用的 parameterMode,而与其是显式还是默认无关。

如果将输入参数的该属性设置为“true”,则将生成一个错误。

<Value>

precision

<SqlParameter> 元素属性提供了参数值的精度。默认值为 18。

<SqlParameter>

<值>

scale

<SqlParameter> 元素属性提供了参数值的小数位数。默认值为 0。

<SqlParameter>

<Value>

sqlCompareOptions

定义用于字符类型排序规则的比较选项。它是可以合并的值的枚举,与 COLLATIONPROPERTY 内部返回的 ComparisonStyle 值相匹配。

<SqlParameter><Value>

sqlDbType

指定参数类型。有关您可以指定的 SQL Server 2005 系统数据类型的列表,请参阅本机 XML Web 服务中的数据类型映射

<SqlParameter>

typeName

用于指定用户定义类型参数。typeName 必须包含由三部分构成的名称。

<SqlParameter>

<Value>

useDefaultValue

指示应该使用参数的默认值,既可以从列表中省略参数元素,也可以指定值为 true 的布尔值属性 useDefaultValue。如果包含元素,则此属性的默认值为 false;如果省略了元素,则此属性的默认值为 true。

<SqlParameter>

<Value>

XmlNamespace

指定与 xml 类型参数关联的 XML 架构命名空间。

<SqlParameter>

<值>

xsi:type

指定值类型。有关 xsi:type 方面如何映射到 SQL Server 2005 系统数据类型的详细信息,请参阅本机 XML Web 服务中的数据类型映射

<Value>

请参阅

参考

SOAP 请求和响应消息结构
SOAP 扩展标头
SOAP 响应消息结构
SOAP 错误消息结构
SOAP 请求和响应中使用的命名空间

帮助和信息

获取 SQL Server 2005 帮助