Documento WSDL predefinito

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Il documento WSDL predefinito viene restituito quando viene passata la stringa argomento wsdl a un endpoint SOAP HTTP in esecuzione su un'istanza di SQL Server, ad esempio http://MyServer/MyEndpoint/sql?wsdl.

Per i documenti WSDL predefiniti, gli elementi dei parametri contengono mapping dei tipi dai mapping sqltypes:type WSDL ai tipi di dati di sistema di SQL Server. Per ulteriori informazioni su tali mapping, vedere Mapping dei tipi di dati in servizi Web XML nativi.

Nel documento WSDL predefinito generato da un endpoint viene specificato il tipo di parametro mediante il riferimento a uno dei tipi definiti in Data Type Mappings oppure ai sottotipi di tali tipi e quindi aggiungendo ulteriori restrizioni. Per tutti i tipi stringa e binari, il documento WSDL predefinito restituito dall'endpoint contiene un sottotipo che include il facet XSD maxLength per specificare il numero di byte o caratteri.

Il facet maxLength non viene generato per tipi a lunghezza variabile dichiarati con l'identificatore (max). Per i tipi di dati decimal e numeric, il documento WSDL predefinito genera un sottotipo che include i facet XSD totalDigits e fractionDigits destinati a descrivere la precisione e la scala del parametro.

Mapping dei tipi CLR per il documento WSDL predefinito in SQL Server

Le istanze del documento WSDL predefinito includono il supporto per il mapping dei tipi di dati di SQL Server nei tipi Common Language Runtime (CLR) implementati in Microsoft .NET Framework 2.0. A causa del non corretto allineamento di alcuni tipi di dati CLR predefiniti con i tipi di dati di SQL Server, in .NET Framework 2.0 è implementato lo spazio dei nomi System.Data.SqlTypes. Un sistema di tipi gestiti può, grazie a questa caratteristica, gestire in maniera specifica molti dei facet del sistema dei tipi di dati di SQL Server dei quali altrimenti non potrebbe essere eseguito il mapping in tipi XSD.

In .NET Framework 2.0, lo strumento WSDL (Wsdl.exe) supporta per impostazione predefinita la generazione appropriata di mapping dei tipi da SQL Server a CLR per le istanze dei documenti WSDL predefiniti. Questo supporto è disponibile utilizzando Wsdl.exe al prompt dei comandi o mediante l'aggiunta di un riferimento Web a un progetto Visual Studio 2005.

Nelle istanze WSDL generate utilizzando questo tipo di supporto di mapping, tutti i tipi di dati di SQL Server vengono codificati dichiarando e utilizzando un URI dello spazio dei nomi specifico (https://schemas.microsoft.com/sqlserver/2004/sqltypes) e il suo prefisso corrispondente (sqltypes). Nella tabella seguente viene mostrato come viene eseguito il mapping di **sqltype:**type in istanze WSDL generate mediante lo strumento Wsdl.exe per eseguire il mapping nei rispettivi tipi CLR corrispondenti.

Elemento del tipo WSDL

Tipo 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 Mappato in una classe wrapper per una matrice di oggetti System.Xml.XmlNode. La classe wrapper è denominata xml per i parametri XML non tipizzati, ma utilizza un nome generato per i parametri XML tipizzati.

2 Mappato in una classe wrapper che racchiude un singolo oggetto System.Xml.XmlElement che utilizza un nome generato.

Gestione del tipo di dati xml nel documento WSDL predefinito

Quando nel documento WSDL predefinito sono definiti parametri di tipi di dati xml, questi vengono mappati nel tipo di dati WSDL sqltypes:xml. Ciò consente di specificare codice XML corretto senza alcun contenuto aggiuntivo o convalida basata sullo schema. Per ulteriori informazioni, vedere Implementazione di XML in SQL Server.

Per i parametri di tipi di dati xml associati a uno spazio dei nomi XML, il documento WSDL predefinito genererà un elemento <xsd:complexType> contenente restrizioni sul tipo sqltypes:xml. Il codice XML tipizzato specifica a sua volta il tipo xsd:any come regola di restrizione. Nell'esempio seguente viene mostrato come a sua volta questa restrizione specificherà l'attributo processContents impostando il suo valore su strict e anche l'attributo namespace impostando il suo valore su un elenco degli spazi dei nomi XML corrispondenti associati all'insieme di schemi al quale è destinato il codice XML tipizzato.

<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>