ServiceDescription e riferimento a WSDL

In questo argomento viene descritto come Windows Communication Foundation (WCF) esegue il mapping di documenti WSDL (Web Services Description Language) da e verso istanze ServiceDescription.

Mapping di ServiceDescription a WSDL 1.1

È possibile utilizzare WCF per esportare documenti WSDL da un'istanza ServiceDescription per il servizio . I documenti WSDL vengono generati automaticamente per il servizio quando si pubblicano endpoint di metadati.

È inoltre possibile importare istanze ServiceEndpoint, ContractDescription e Binding da documenti WSDL utilizzando il tipo WsdlImporter.

I documenti WSDL, esportati da WCF, importano tutti i dati XSD (XML Schema Definition) utilizzati da documenti XSD esterni. Per ogni spazio dei nomi di destinazione che i tipi di dati utilizzano nel servizio viene esportato un documento XSD separato. Analogamente, per ogni spazio dei nomi di destinazione utilizzato dai contratti di servizio viene esportato un documento WSDL separato.

ServiceDescription

Un'istanza ServiceDescription esegue il mapping a un elemento wsdl:service. Un'istanza ServiceDescription contiene un insieme di istanze ServiceEndpoint, ognuna delle quali esegue il mapping a singoli elementi wsdl:port.

Proprietà Mapping WSDL

Name

Valore wsdl:service/@name per il servizio.

Namespace

Valore targetNamespace per la definizione wsdl:service del servizio.

Endpoints

Definizioni di wsdl:port per il servizio.

ServiceEndpoint

Un'istanza ServiceEndpoint esegue il mapping a un elemento wsdl:port. Un'istanza ServiceEndpoint contiene un indirizzo, un'associazione e un contratto.

I comportamenti dell'endpoint che implementano l'interfaccia IWsdlExportExtension possono modificare l'elemento wsdl:port per l'endpoint al quale sono associati.

Proprietà Mapping WSDL

Name

Valore wsdl:port/@name per l'endpoint e valore wsdl:binding/@name per l'associazione all'endpoint.

Address

Indirizzo per la definizione di wsdl:port per l'endpoint.

Il trasporto per l'endpoint determina il formato dell'indirizzo. Per i trasporti supportati da WCF, ad esempio, può essere un indirizzo SOAP o un riferimento a un endpoint.

Binding

Definizione di wsdl:binding per l'endpoint.

A differenza delle definizioni di wsdl:binding, le associazioni in WCF non vengono associate ad alcun contratto.

Contract

Definizione di wsdl:portType per l'endpoint.

Behaviors

I comportamenti dell'endpoint che implementano l'interfaccia IWsdlExportExtension possono modificare l'elemento wsdl:port per l'endpoint.

Associazioni

L'istanza di associazione per un'istanza ServiceEndpoint esegue il mapping a una definizione di wsdl:binding. A differenza delle definizioni di wsdl:binding, che devono essere associate a una definizione di wsdl:portType specifica, le associazioni WCF sono indipendenti da qualsiasi contratto.

Un'associazione è costituita da un insieme di elementi di associazione. Ogni elemento descrive alcuni aspetti relativi alla modalità di comunicazione tra l'endpoint e i client. Un'associazione comprende inoltre una classe MessageVersion che indica le classi EnvelopeVersion e AddressingVersion per l'endpoint.

Proprietà Mapping WSDL

Name

Utilizzato nel nome predefinito di un endpoint, ovvero il nome dell'associazione seguito dal nome del contratto separati da un carattere di sottolineatura.

Namespace

targetNamespace per la definizione di wsdl:binding.

Se alla porta WSDL è associato un criterio, al momento dell'importazione viene eseguito il mapping dello spazio dei nomi di associazione importato a targetNamespace per la definizione di wsdl:port.

Elemento BindingElementCollection restituito dal metodo CreateBindingElements().

Varie estensioni specifiche del dominio alla definizione di wsdl:binding, in genere asserzioni di criteri.

MessageVersion

EnvelopeVersion e AddressingVersion per l'endpoint.

Quando viene specificato MessageVersion.None, l'associazione WSDL non contiene un'associazione SOAP e la porta WSDL non include il contenuto WS-Addressing. Questa impostazione viene in genere utilizzata per endpoint XML (POX) obsoleti.

BindingElements

Gli elementi di associazione per un endpoint eseguono il mapping a varie estensioni WSDL nell'elemento wsdl:binding, ad esempio asserzioni di criteri.

La classe TransportBindingElement per l'associazione determina l'URI (Uniform Resource Identifier) per un'associazione SOAP.

AddressingVersion

L'elemento AddressingVersion in un'associazione esegue il mapping alla versione di indirizzamento utilizzata in wsd:port. WCF supporta indirizzi SOAP 1.1 e SOAP 1.2 e riferimenti a endpoint WS-Addressing 08/2004 e WS-Addressing 1.0.

EnvelopeVersion

L'elemento EnvelopeVersion in un'associazione esegue il mapping alla versione di SOAP utilizzata in wsdl:binding. WCF supporta associazioni SOAP 1.1 e SOAP 1.2.

Contratti

L'istanza ContractDescription di un'istanza ServiceEndpoint esegue il mapping a wsdl:portType. Un'istanza ContractDescription descrive tutte le operazioni per un determinato contratto.

Proprietà Mapping WSDL

Name

Valore wsdl:portType/@name per il contratto.

Namespace

Valore targetNamespace per la definizione di wsdl:portType.

SessionMode

Valore wsdl:portType/@msc:usingSession per il contratto. Questo attributo è un'estensione WCF per WSDL 1.1.

Operations

Definizioni di wsdl:operation per il contratto.

Operazioni

Un'istanza OperationDescription esegue il mapping a wsdl:portType/wsdl:operation. Un elemento OperationDescription contiene un insieme di istanze MessageDescription che descrivono i messaggi per l'operazione.

La modalità di esecuzione del mapping di OperationDescription a un documento WSDL è fortemente influenzata dai comportamenti di due operazioni: DataContractSerializerOperationBehavior e XmlSerializerOperationBehavior.

Proprietà Mapping WSDL

Name

Valore wsdl:portType/wsdl:operation/@name per l'operazione.

ProtectionLevel

Asserzioni di protezione in un criterio di protezione associato ai messaggi wsdl:binding/wsdl:operation per questa operazione.

IsInitiating

Valore wsdl:portType/wsdl:operation/@msc:isInitiating per l'operazione. Questo attributo è un'estensione WCF per WSDL 1.1.

IsTerminating

Valore wsdl:portType/wsdl:operation/@msc:isTerminating per l'operazione. Questo attributo è un'estensione WCF per WSDL 1.1.

Messages

Messaggi wsdl:portType/wsdl:operation/wsdl:input e wsdl:portType/wsdl:operation/wsdl:output per l'operazione.

Faults

Definizioni di wsdl:portType/wsdl:operation/wsdl:fault per l'operazione.

Behaviors

DataContractSerializerOperationBehavior e XmlSerializerOperationBehavior si riferiscono all'associazione e ai messaggi dell'operazione.

DataContractSerializerOperationBehavior

L'elemento DataContractSerializerOperationBehavior per un'operazione è un'implementazione dell'interfaccia IWsdlExportExtension che esporta i messaggi e l'associazione WSDL per l'operazione in questione. I tipi XML Schema vengono esportati utilizzando XsdDataContractExporter. L'elemento DataContractSerializerOperationBehavior determina inoltre l'utilizzo, lo stile e l'utilità di esportazione e importazione dello schema da utilizzare per l'operazione.

Proprietà Mapping WSDL

DataContractFormatAttribute

La proprietà Style per questo attributo esegue il mapping al valore wsdl:binding/wsdl:operation/soap:operation/@style per l'operazione.

DataContractSerializerOperationBehavior supporta soltanto l'utilizzo letterale dei tipi di schema in WSDL.

XmlSerializerOperationBehavior

L'elemento XmlSerializerOperationBehavior per un'operazione è un'implementazione dell'interfaccia IWsdlExportExtension che esporta i messaggi e l'associazione WSDL per tale operazione. I tipi XML Schema vengono esportati utilizzando XmlSchemaExporter. L'elemento XmlSerializerOperationBehavior determina inoltre l'utilizzo, lo stile e l'utilità di esportazione e importazione dello schema da utilizzare per l'operazione.

Proprietà Mapping WSDL

XmlSerializerFormatAttribute

La proprietà Style per questo attributo esegue il mapping al valore wsdl:binding/wsdl:operation/soap:operation/@style per l'operazione.

La proprietà Use per questo attributo esegue il mapping ai valori wsdl:binding/wsdl:operation/soap:operation/*/@use per tutti i messaggi inclusi nell'operazione.

Messaggi

Un'istanza MessageDescription esegue il mapping a un elemento wsdl:message al quale fa riferimento un messaggio wsdl:portType/wsdl:operation/wsdl:input o wsdl:portType/wsdl:operation/wsdl:output in un'operazione. Un elemento MessageDescription è costituito da un corpo e da intestazioni.

Proprietà Mapping WSDL

Action

Azione SOAP o WS-Addressing per il messaggio.

Le operazioni che utilizzano la stringa di azione "*" non sono rappresentate in WSDL.

Direction

MessageDirection.Input esegue il mapping a wsdl:input.

MessageDirection.Output esegue il mapping a wsdl:output.

ProtectionLevel

Asserzioni di protezione in un criterio di protezione associato alla definizione di wsdl:message per questo messaggio.

Body

Corpo del messaggio.

Headers

Intestazioni del messaggio.

ContractDescription.Name, OperationContract.Name

Utilizzato per derivare il valore wsdl:message/@name al momento dell'esportazione.

Corpo del messaggio

Un'istanza MessageBodyDescription esegue il mapping alle definizioni di wsdl:message/wsdl:part per il corpo di un messaggio. Il corpo del messaggio può essere wrapped o bare.

Proprietà Mapping WSDL

WrapperName

Se lo stile non è RPC, WrapperName esegue il mapping al nome dell'elemento a cui fa riferimento wsdl:message/wsdl:part con il valore @name impostato su "parameters".

WrapperNamespace

Se lo stile non è RPC, WrapperNamespace esegue il mapping allo spazio dei nomi dell'elemento per wsdl:message/wsdl:part con il valore @name impostato su "parameters".

Parts

Parti del messaggio per questo corpo del messaggio.

ReturnValue

Elemento figlio dell'elemento wrapper se un elemento wrapper esiste (stile incapsulato da documenti o stile RPC). In caso contrario, il primo elemento wsdl:message/wsdl:part nel messaggio.

Parti del messaggio

Un'istanza MessagePartDescription esegue il mapping a un elemento wsdl:message/wsdl:part e al tipo di schema XML o elemento a cui fa riferimento la parte del messaggio.

Proprietà Mapping WSDL

Name

Valore wsd:message/wsdl:part/@name per la parte del messaggio e il nome dell'elemento a cui fa riferimento la parte del messaggio.

Namespace

Spazio dei nomi dell'elemento al quale fa riferimento la parte del messaggio.

Index

Indice dell'elemento wsdl:message/wsdl:part per il messaggio.

ProtectionLevel

Asserzioni di protezione in un criterio di protezione associato alla definizione di wsdl:message per questa parte del messaggio. Nel criterio vengono impostati parametri per fare riferimento alla parte del messaggio specifica.

MessageType

Tipo di schema XML dell'elemento al quale fa riferimento la parte del messaggio.

Intestazioni del messaggio

Un'istanza MessageHeaderDescription è una parte del messaggio che esegue il mapping a un'associazione soap:header per la parte del messaggio.

Errori

Un'istanza FaultDescription esegue il mapping a una definizione di wsdl:portType/wsdl:operation/wsdl:fault e alla relativa definizione di wsdl:message associata. L'elemento wsdl:message viene aggiunto allo stesso spazio dei nomi di destinazione del tipo di porta WSDL associato. L'elemento wsdl:message ha una sola parte di messaggio denominata "detail" che fa riferimento all'elemento XML Schema che corrisponde al valore della proprietà DefaultType per l'istanza FaultDescription.

Proprietà Mapping WSDL

Name

Valore wsdl:portType/wsdl:operation/wsdl:fault/@name dell'errore.

Namespace

Spazio dei nomi dell'elemento XML Schema al quale fa riferimento il messaggio di dettaglio dell'errore.

Action

Azione SOAP o WS-Addressing per l'errore.

ProtectionLevel

Asserzioni di protezione in un criterio di protezione associato alla definizione di wsdl:message per questo errore.

DetailType

Tipo XML Schema dell'elemento al quale fa riferimento il messaggio dettagliato.

Name, ContractDescription.Name, OperationDescription.Name,

Utilizzato per derivare il valore wsdl:message/@name per il messaggio di errore.

Vedere anche

Riferimenti

System.ServiceModel.Description