Compartilhar via


ServiceDescription and WSDL Reference

Este tópico descreve como o WCF (Windows Communication Foundation) mapeia documentos de linguagem WSDL de e para instâncias ServiceDescription.

Como o ServiceDescription mapeia para WSDL 1.1

Você pode usar o WCF para exportar documentos de WSDL de uma instância ServiceDescription para o seu serviço. Os documentos de WSDL são gerados automaticamente para o serviço quando você publica pontos de extremidade de metadados.

Você também pode importar instâncias ServiceEndpoint, ContractDescription e Binding de documentos de WSDL usando o tipo WsdlImporter.

Os documentos de WSDL, exportados pelo WCF, importam quaisquer definições de esquema XML usadas de documentos de esquema XML externos. Um documento de esquema XML separado é exportado para cada namespace de destino que os tipos de dados usam no serviço. Da mesma forma, um documento de WSDL separado é exportado para cada namespace de destino que os contratos de serviço usam.

ServiceDescription

Uma instância ServiceDescription é mapeada para um elemento wsdl:service. Uma instância ServiceDescription contém uma coleção de instâncias ServiceEndpoint que cada uma mapeia para elementos wsdl:port individuais.

Propriedades Mapeamento de WSDL
Name O valor wsdl:service/@name para o serviço.
Namespace O targetNamespace para a definição wsdl:service do serviço.
Endpoints As definições wsdl:port para o serviço.

ServiceEndpoint

Uma instância ServiceEndpoint é mapeada para um elemento wsdl:port. Uma instância ServiceEndpoint contém um endereço, uma associação e um contrato.

Comportamentos de ponto de extremidade que implementam a interface IWsdlExportExtension podem modificar o elemento wsdl:port para o ponto de extremidade ao qual estão anexados.

Propriedades Mapeamento de WSDL
Name O valor wsdl:port/@name para o ponto de extremidade e o valor wsdl:binding/@name para a associação de ponto de extremidade.
Address O endereço para a definição wsdl:port do ponto de extremidade.

O transporte para o ponto de extremidade determina o formato do endereço. Por exemplo, para transportes compatíveis com WCF, pode ser um endereço SOAP ou uma referência de ponto de extremidade.
Binding A definição wsdl:binding do ponto de extremidade.

Ao contrário das definições wsdl:binding, as associações no WCF não estão vinculadas a nenhum contrato.
Contract A definição wsdl:portType do ponto de extremidade.
Behaviors Comportamentos de ponto de extremidade que implementam a interface IWsdlExportExtension podem modificar o wsdl:port para o ponto de extremidade.

Associações

A instância de associação de uma instância ServiceEndpoint é mapeada para uma definição wsdl:binding. Ao contrário das definições wsdl:binding, que devem ser associadas a uma definição wsdl:portType específica, as associações WCF são independentes de qualquer contrato.

Uma associação é composta por uma coleção de elementos de associação. Cada elemento descreve alguns aspectos de como o ponto de extremidade se comunica com os clientes. Além disso, uma associação tem um MessageVersion que indica o EnvelopeVersion e o AddressingVersion para o ponto de extremidade.

Propriedades Mapeamento de WSDL
Name Usado no nome padrão de um ponto de extremidade, que é o nome de associação com o nome do contrato acrescentado separado por um sublinhado.
Namespace O targetNamespace para a definição wsdl:binding.

Na importação, se uma política estiver anexada à porta WSDL, o namespace de associação importado será mapeado para o targetNamespace para a definição wsdl:port.
BindingElementCollection, conforme retornado pelo método CreateBindingElements() Várias extensões específicas do domínio para a definição wsdl:binding, normalmente declarações de política.
MessageVersion O EnvelopeVersion e o AddressingVersion para o ponto de extremidade.

Quando MessageVersion.None é especificado, a associação WSDL não contém uma associação SOAP e a porta WSDL não contém conteúdo do WS-Addressing. Essa configuração normalmente é usada para pontos de extremidade XML (POX) antigos simples.

BindingElements

Os elementos de associação de um mapa de associação de ponto de extremidade para várias extensões WSDL no wsdl:binding, como declarações de política.

A associação TransportBindingElement determina o URI (Uniform Resource Identifier) de transporte para uma associação SOAP.

AddressingVersion

O AddressingVersion em uma associação é mapeado para a versão de endereçamento usada no wsd:port. O WCF dá suporte a endereços SOAP 1.1 e SOAP 1.2 e referências de ponto de extremidade WS-Addressing 08/2004 e WS-Addressing 1.0.

EnvelopeVersion

O EnvelopeVersion em uma associação é mapeado para a versão de SOAP usada no wsdl:binding. O WCF dá suporte a associações SOAP 1.1 e SOAP 1.2.

Contratos

A instância ContractDescription de uma instância ServiceEndpoint é mapeada para um wsdl:portType. Uma instância ContractDescription descreve todas as operações de um determinado contrato.

Propriedades Mapeamento de WSDL
Name O valor wsdl:portType/@name para o contrato.
Namespace O targetNamespace para a definição wsdl:portType.
SessionMode O valor wsdl:portType/@msc:usingSession para o contrato. Esse atributo é uma extensão WCF para WSDL 1.1.
Operations As definições wsdl:operation do contrato.

Operations

Por exemplo, OperationDescription é mapeado para um wsdl:portType/wsdl:operation. Um OperationDescription contém uma coleção de instâncias MessageDescription que descrevem as mensagens para a operação.

Dois comportamentos de operação participam fortemente de como um OperationDescription é mapeado para um documento de WSDL: DataContractSerializerOperationBehavior e XmlSerializerOperationBehavior.

Propriedades Mapeamento de WSDL
Name O valor wsdl:portType/wsdl:operation/@name para a operação.
ProtectionLevel Declarações de proteção na política de segurança anexadas às mensagens wsdl:binding/wsdl:operation para essa operação.
IsInitiating O valor wsdl:portType/wsdl:operation/@msc:isInitiating para a operação. Esse atributo é uma extensão WCF para WSDL 1.1.
IsTerminating O valor wsdl:portType/wsdl:operation/@msc:isTerminating para a operação. Esse atributo é uma extensão WCF para WSDL 1.1.
Messages As mensagens wsdl:portType/wsdl:operation/wsdl:input e wsdl:portType/wsdl:operation/wsdl:output para a operação.
Faults As definições wsdl:portType/wsdl:operation/wsdl:fault para a operação.
Behaviors O DataContractSerializerOperationBehavior e XmlSerializerOperationBehavior tratam a associação da operação e as mensagens da operação.

O DataContractSerializerOperationBehavior

O DataContractSerializerOperationBehavior para uma operação é uma implementação IWsdlExportExtension que exporta as mensagens de WSDL e a associação para essa operação. Os tipos de esquema XML são exportados usando o XsdDataContractExporter. O DataContractSerializerOperationBehavior também determina o uso, o estilo e o exportador de esquema e o importador a serem usados para essa operação.

Propriedades Mapeamento de WSDL
DataContractFormatAttribute A propriedade Style desse atributo é mapeada para o valor wsdl:binding/wsdl:operation/soap:operation/@style da operação.

O DataContractSerializerOperationBehavior dá suporte apenas ao uso literal dos tipos de esquema no WSDL.

The XmlSerializerOperationBehavior

O XmlSerializerOperationBehavior para uma operação é uma implementação IWsdlExportExtension que exporta as mensagens de WSDL e a associação para essa operação. Os tipos de esquema XML são exportados usando o XmlSchemaExporter. O XmlSerializerOperationBehavior também determina o uso, o estilo e o exportador de esquema e o importador a serem usados para essa operação.

Propriedades Mapeamento de WSDL
XmlSerializerFormatAttribute A propriedade Style desse atributo é mapeada para o valor wsdl:binding/wsdl:operation/soap:operation/@style da operação.

A propriedade Use desse atributo é mapeada para os valores wsdl:binding/wsdl:operation/soap:operation/*/@use para todas as mensagens na operação.

Mensagens

Uma instância MessageDescription é mapeada para um wsdl:message referenciado por uma mensagem wsdl:portType/wsdl:operation/wsdl:input ou wsdl:portType/wsdl:operation/wsdl:output em uma operação. Um MessageDescription tem um corpo e cabeçalhos.

Propriedades Mapeamento de WSDL
Action A ação SOAP ou WS-Addressing para a mensagem.

Observe que as operações que usam a cadeia de caracteres de ação "*" não são representadas no WSDL.
Direction O MessageDirection.Input é mapeado para wsdl:input.

O MessageDirection.Output é mapeado para wsdl:output.
ProtectionLevel Declarações de proteção na política de segurança anexadas à definição wsdl:message para essa mensagem.
Body O corpo da mensagem para a mensagem.
Headers Os cabeçalhos para a mensagem.
ContractDescription.Name, OperationContract.Name Na exportação, usado para derivar o valor wsdl:message/@name.

Corpo da mensagem

Uma instância MessageBodyDescription é mapeada para as definições wsdl:message/wsdl:part para o corpo de uma mensagem. O corpo da mensagem pode estar encapsulado ou nu.

Propriedades Mapeamento de WSDL
WrapperName Se o estilo não for RPC, os mapas WrapperName serão mapeados para o nome do elemento referenciado pelo wsdl:message/wsdl:part com @name definido como "parâmetros".
WrapperNamespace Se o estilo não for RPC, os mapas WrapperNamespace serão mapeados para o nome do elemento namespace para o wsdl:message/wsdl:part com @name definido como "parâmetros".
Parts As partes da mensagem para esse corpo da mensagem.
ReturnValue O elemento filho do elemento wrapper se existir um elemento wrapper (estilo encapsulado de documento ou estilo RPC), caso contrário, o primeiro wsdl:message/wsdl:part na mensagem.

Partes da mensagem

Uma instância MessagePartDescription mapeia para um wsdl:message/wsdl:part e o tipo de esquema XML ou elemento para o qual a parte da mensagem aponta.

Propriedades Mapeamento de WSDL
Name O valor wsd:message/wsdl:part/@name para a parte da mensagem e o nome do elemento para o qual a parte da mensagem aponta.
Namespace O namespace do elemento para o qual a parte da mensagem aponta.
Index O índice do wsdl:message/wsdl:part para a mensagem.
ProtectionLevel Declarações de proteção na política de segurança anexadas à definição wsdl:message para essa parte da mensagem. A política é parametrizada para apontar para a parte específica da mensagem.
MessageType O tipo de esquema XML do elemento para o qual a parte da mensagem aponta.

Cabeçalhos da mensagem

Uma instância MessageHeaderDescription é uma parte de mensagem que também é mapeada para uma associação soap:header para a parte da mensagem.

Falhas

Uma instância FaultDescription é mapeada para uma definição wsdl:portType/wsdl:operation/wsdl:fault e sua definição wsdl:message associada. O wsdl:message é adicionado ao mesmo namespace de destino que seu tipo de porta WSDL associado. O wsdl:message tem uma única parte de mensagem chamada "detalhe" que aponta para o elemento XML Schema que corresponde ao valor da propriedade DefaultType da instância FaultDescription.

Propriedades Mapeamento de WSDL
Name O valor wsdl:portType/wsdl:operation/wsdl:fault/@name para a falha.
Namespace O namespace do elemento XML Schema para o qual a parte da mensagem de detalhes de falha aponta.
Action A ação SOAP ou WS-Addressing para a falha.
ProtectionLevel Declarações de proteção na política de segurança anexadas à definição wsdl:message para essa falha.
DetailType O tipo de esquema XML do elemento para o qual a parte da mensagem de detalhes aponta.
Name, ContractDescription.Name, OperationDescription.Name, Usado para derivar o valor wsdl:message/@name para a mensagem de falha.

Confira também