默认 WSDL

后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

当参数字符串 wsdl 传递到 SQL Server 实例运行的 HTTP SOAP 端点时,将返回默认 WSDL,例如:http://MyServer/MyEndpoint/sql?wsdl。

对于默认 WSDL 文档,参数元素包含从 WSDL sqltypes:type 映射到 SQL Server 系统数据类型的类型映射。有关这些映射的信息,请参阅本机 XML Web 服务中的数据类型映射

由端点生成的默认 WSDL 文档通过以下方法指定参数类型:引用数据类型映射中定义的一种类型或引用那些类型的子类型,然后另外添加限制。对于所有的字符串类型和二进制类型,由端点返回的默认 WSDL 将包括一个子类型,其中包括用于指定字节数和字符数的 XSD maxLength 方面。

对于用 (max) 说明符声明的可变长度类型,不生成 maxLength 方面。对于 decimal 和 numeric 数据类型,默认 WSDL 将生成一个子类型,其中包括用于说明参数的精度和小数位数的 XSD totalDigitsfractionDigits 方面。

默认 WSDL 中 SQL Server 到公共语言运行时类型的映射

默认 WSDL 实例支持将 SQL Server 数据类型映射到 Microsoft .NET Framework 2.0 中提供的公共语言运行时 (CLR) 类型。由于一些内置 CLR 数据类型与 SQL Server 数据类型不太相配,因此 .NET Framework 2.0 中提供了 System.Data.SqlTypes 命名空间。这将启用一个托管类型系统,该系统尤其可以处理 SQL Server 数据类型系统中无法用其他方法映射为 XSD 类型的许多方面。

对于 .NET Framework 2.0 版,Web 服务定义语言工具 (Wsdl.exe) 具有为默认 WSDL 实例生成相应的 SQL Server 到 CLR 类型映射的内置支持。无论您在命令提示符窗口中使用 Wsdl.exe,还是通过向 Visual Studio 2005 项目添加 Web 引用的方式,此支持都可用。

在通过使用此类型映射支持生成的 WSDL 实例中,通过声明和使用特定命名空间 URI (https://schemas.microsoft.com/sqlserver/2004/sqltypes) 及其对应前缀 (sqltypes) 对所有 SQL Server 数据类型进行编码。下表说明通过 Wsdl.exe 工具生成的 WSDL 实例中的 **sqltype:**type 映射映射到其对应 CLR 类型的情况。

WSDL 类型元素

CLR 类型

sqltypes:char

System.Data.SqlTypes.SqlString

sqltypes:nchar

System.Data.SqlTypes.SqlString

sqltypes:varchar

System.Data.SqlTypes.SqlString

sqltypes:nvarchar

System.Data.SqlTypes.SqlString

sqltypes:text

System.Data.SqlTypes.SqlString

sqltypes:ntext

System.Data.SqlTypes.SqlString

sqltypes:varbinary

System.Data.SqlTypes.SqlBinary

sqltypes:binary

System.Data.SqlTypes.SqlBinary

sqltypes:image

System.Data.SqlTypes.SqlBinary

sqltypes:timestamp

System.Byte[]

sqltypes:timestampNumeric

System.Int64

sqltypes:decimal

System.Data.SqlTypes.SqlDecimal

sqltypes:numeric

System.Data.SqlTypes.SqlDecimal

sqltypes:bigint

System.Data.SqlTypes.SqlInt64

sqltypes:int

System.Data.SqlTypes.SqlInt32

sqltypes:smallint

System.Data.SqlTypes.SqlInt16

sqltypes:tinyint

System.Data.SqlTypes.SqlByte

sqltypes:bit

System.Data.SqlTypes.SqlBoolean

sqltypes:float

System.Data.SqlTypes.SqlDouble

sqltypes:real

System.Data.SqlTypes.SqlSingle

sqltypes:datetime

System.Data.SqlTypes.SqlDateTime

sqltypes:smalldatetime

System.Data.SqlTypes.SqlDateTime

sqltypes:money

System.Data.SqlTypes.SqlMoney

sqltypes:smallmoney

System.Data.SqlTypes.SqlMoney

sqltypes:uniqueidentifier

System.Data.SqlTypes.SqlGuid

sqltypes:xml

System.Xml.XmlNode[]1

sqltypes:sqlDbType="Sql_Variant"

System.Object

sqltypes:sqlDbType="Udt"

System.Xml.XmlElement2

sqltypes:sqlDbType="Structured" 

System.Data.DataSet

1 映射到 System.Xml.XmlNode 对象数组的类包装。包装类被命名为非类型化 XML 参数的 xml,但它使用为类型化 XML 参数生成的名称。

2 映射到单个 System.Xml.XmlElement 对象周围使用生成的名称的包装类。

在默认 WSDL 中如何处理 xml 数据类型

在默认 WSDL 中定义 xml 数据类型参数时,它们将被映射到 sqltypes:xml WSDL 数据类型。这就使得无需其他内容或基于架构的验证就可指定任何格式正确的 XML。有关详细信息,请参阅 实现 SQL Server 中的 XML

对于绑定到 XML 命名空间的 xml 数据类型参数,默认 WSDL 文档将生成一个 <xsd:complexType> 元素,其中包含对 sqltypes:xml 类型的限制。而类型化的 XML 指定 xsd:any 类型作为限制规则。在下面的示例中,此限制将指定 processContents 属性将其值设置为 strict,还将指定 namespace 属性并将其值设置为与绑定类型化 XML 的架构集合关联的对应 XML 命名空间。

<xsd:element name="xmlVal" minOccurs="1" maxOccurs="1" nillable="true">
    <xsd:complexType >
        <xsd:restriction base="sqltypes:xml">
             <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="strict" namespace="NS1 NS2 ...." /> 
        </xsd:restriction>
    </xsd:complexType>
</xsd:element>