既定の WSDL
引数文字列 wsdl
が SQL Server 2005 インスタンス上で実行されている HTTP SOAP エンドポイント (たとえば、http://MyServer/MyEndpoint/sql?wsdl
) に渡されたときに、既定の WSDL が返されます。
既定の WSDL ドキュメントでは、パラメータ要素に、WSDL sqltypes:type マッピングから SQL Server 2005 システム データ型への型マッピングが保持されます。これらのマッピングの詳細については、「ネイティブ XML Web サービスでのデータ型マッピング」を参照してください。
エンドポイントにより生成された既定の WSDL ドキュメントは、データ型マッピングに定義されている型の 1 つを参照するか、これらの型のサブタイプを参照し、さらに制限を追加することでパラメータの型を指定します。すべての文字列型とバイナリ型の場合は、エンドポイントにより返された既定の WSDL に、バイト数または文字数を指定するための XSD maxLength ファセットを含むサブタイプが含まれます。
maxLength ファセットは、(max) 指定子によって宣言された可変長型には生成されません。decimal データ型と numeric データ型の場合は、既定の WSDL は、パラメータの有効桁数と小数点以下桁数を記述する XSD totalDigits ファセットと fractionDigits ファセットを含むサブタイプを生成します。
既定の WSDL での SQL Server から共通言語ランタイムへの型マッピング
既定の WSDL インスタンスでは、SQL Server データ型から Microsoft .NET Framework 2.0 が提供する CLR (共通言語ランタイム) 型へのマッピングがサポートされます。組み込みの CLR データ型の中には、SQL Server データ型と適切に対応できない型もあるので、.NET Framework 2.0 には System.Data.SqlTypes 名前空間が用意されています。これにより、XSD 型内ではマップできない SQL Server 2005 データ型システムのファセットの多くを特別に処理するマネージ型システムを実現できます。
.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 ツールを使用して対応する CLR 型にマップすると生成される、WSDL インスタンスの **sqltype:**type マッピングを示します。
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 |
1 System.Xml.XmlNode オブジェクトの配列用クラス ラッパーにマップされます。このラッパー クラスは型指定されていない XML パラメータ用の名前付き xml ですが、型指定された XML パラメータ用に生成された名前を使用します。
2 生成された名前を使用する単一の System.Xml.XmlElement オブジェクトをラップするクラス ラッパーにマップされます。
既定の WSDL での xml データ型の処理方法
xml データ型パラメータが既定の WSDL 内で定義されると、sqltypes:xml WSDL データ型にマップされます。これにより、追加のコンテンツまたはスキーマベースの検証を行わずに、整形式の XML の指定を可能にしています。詳細については、「xml データ型」を参照してください。
XML 名前空間にバインドされた xml データ型パラメータの場合、既定の WSDL ドキュメントは sqltypes:xml 型に対する制限を含む <xsd:complexType> 要素を生成します。その後、型指定された XML により xsd:any 型が制限規則として指定されます。次の例のように、この制限により、strict
を値に設定した processContents
属性が指定されます。また、この制限により 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>