ServiceDescription and WSDL Reference

This topic describes how Windows Communication Foundation (WCF) maps Web Services Description Language (WSDL) documents to and from ServiceDescription instances.

How ServiceDescription Maps to WSDL 1.1

You can use WCF to export WSDL documents from a ServiceDescription instance for your service. WSDL documents are automatically generated for your service when you publish metadata endpoints.

You can also import ServiceEndpoint instances, ContractDescription instances, and Binding instances from WSDL documents using the WsdlImporter type.

The WSDL documents, exported by WCF, import any XML Schema definitions used from external XML Schema documents. A separate XML Schema document is exported for each target namespace the data types use in the service. Likewise, a separate WSDL document is exported for each target namespace the service contracts use.

ServiceDescription

A ServiceDescription instance maps to a wsdl:service element. A ServiceDescription instance contains a collection of ServiceEndpoint instances that each map to individual wsdl:port elements.

Properties WSDL mapping
Name The wsdl:service/@name value for the service.
Namespace The targetNamespace for the wsdl:service definition for the service.
Endpoints The wsdl:port definitions for the service.

ServiceEndpoint

A ServiceEndpoint instance maps to a wsdl:port element. A ServiceEndpoint instance contains an address, a binding, and a contract.

Endpoint behaviors that implement the IWsdlExportExtension interface can modify the wsdl:port element for the endpoint they are attached to.

Properties WSDL mapping
Name The wsdl:port/@name value for the endpoint and the wsdl:binding/@name value for the endpoint binding.
Address The address for the wsdl:port definition for the endpoint.

The transport for the endpoint determines the format of the address. For example, for WCF-supported transports it could be a SOAP address or an endpoint reference.
Binding The wsdl:binding definition for the endpoint.

Unlike wsdl:binding definitions, bindings in WCF are not tied to any one contract.
Contract The wsdl:portType definition for the endpoint.
Behaviors Endpoint behaviors that implement the IWsdlExportExtension interface can modify the wsdl:port for the endpoint.

Bindings

The binding instance for a ServiceEndpoint instance maps to a wsdl:binding definition. Unlike wsdl:binding definitions, which must be associated with a specific wsdl:portType definition, WCF bindings are independent of any contract.

A binding is made up of a collection of binding elements. Each element describes some aspect of how the endpoint communicates with clients. Additionally, a binding has a MessageVersion that indicates the EnvelopeVersion and AddressingVersion for the endpoint.

Properties WSDL mapping
Name Used in the default name of an endpoint, which is the binding name with the contract name appended separated by an underscore.
Namespace The targetNamespace for the wsdl:binding definition.

On import, if a policy is attached to the WSDL port, the imported binding namespace maps to the targetNamespace for the wsdl:port definition.
BindingElementCollection, as returned by the CreateBindingElements() method Various domain-specific extensions to the wsdl:binding definition, typically policy assertions.
MessageVersion The EnvelopeVersion and AddressingVersion for the endpoint.

When MessageVersion.None is specified, the WSDL binding does not contain a SOAP binding and the WSDL port does not contain WS-Addressing content. This setting is typically used for plain old XML (POX) endpoints.

BindingElements

The binding elements for an endpoint binding map to various WSDL extensions in the wsdl:binding, such as policy assertions.

The TransportBindingElement for the binding determines the transport Uniform Resource Identifier (URI) for a SOAP binding.

AddressingVersion

The AddressingVersion on a binding maps to the version of addressing used in the wsd:port. WCF supports SOAP 1.1 and SOAP 1.2 addresses, and WS-Addressing 08/2004 and WS-Addressing 1.0 endpoint references.

EnvelopeVersion

The EnvelopeVersion on a binding maps to the version of SOAP used in the wsdl:binding. WCF supports SOAP 1.1 and SOAP 1.2 bindings.

Contracts

The ContractDescription instance for a ServiceEndpoint instance maps to a wsdl:portType. A ContractDescription instance describes all of the operations for a given contract.

Properties WSDL mapping
Name The wsdl:portType/@name value for the contract.
Namespace The targetNamespace for the wsdl:portType definition.
SessionMode The wsdl:portType/@msc:usingSession value for the contract. This attribute is a WCF extension for WSDL 1.1.
Operations The wsdl:operation definitions for the contract.

Operations

An OperationDescription instance maps to a wsdl:portType/wsdl:operation. An OperationDescription contains a collection of MessageDescription instances that describe the messages for the operation.

Two operation behaviors participate heavily in how an OperationDescription is mapped to a WSDL document: DataContractSerializerOperationBehavior and XmlSerializerOperationBehavior.

Properties WSDL mapping
Name The wsdl:portType/wsdl:operation/@name value for the operation.
ProtectionLevel Protection assertions in security policy attached to the wsdl:binding/wsdl:operation messages for this operation.
IsInitiating The wsdl:portType/wsdl:operation/@msc:isInitiating value for the operation. This attribute is a WCF extension for WSDL 1.1.
IsTerminating The wsdl:portType/wsdl:operation/@msc:isTerminating value for the operation. This attribute is a WCF extension for WSDL 1.1.
Messages The wsdl:portType/wsdl:operation/wsdl:input and wsdl:portType/wsdl:operation/wsdl:output messages for the operation.
Faults The wsdl:portType/wsdl:operation/wsdl:fault definitions for the operation.
Behaviors The DataContractSerializerOperationBehavior and XmlSerializerOperationBehavior deal with the operation binding and the operation messages.

The DataContractSerializerOperationBehavior

The DataContractSerializerOperationBehavior for an operation is an IWsdlExportExtension implementation that exports the WSDL messages and binding for that operation. The XML Schema types are exported using the XsdDataContractExporter. The DataContractSerializerOperationBehavior also determines the use, style, and schema exporter and importer to use for that operation.

Properties WSDL Mapping
DataContractFormatAttribute The Style property for this attribute maps to the wsdl:binding/wsdl:operation/soap:operation/@style value for the operation.

The DataContractSerializerOperationBehavior supports only the literal use of the schema types in the WSDL.

The XmlSerializerOperationBehavior

The XmlSerializerOperationBehavior for an operation is an IWsdlExportExtension implementation that exports the WSDL messages and binding for that operation. The XML Schema types are exported using the XmlSchemaExporter. The XmlSerializerOperationBehavior also determines the use, style, and schema exporter and importer to use for that operation.

Properties WSDL mapping
XmlSerializerFormatAttribute The Style property for this attribute maps to the wsdl:binding/wsdl:operation/soap:operation/@style value for the operation.

The Use property for this attribute maps to the wsdl:binding/wsdl:operation/soap:operation/*/@use values for all messages in the operation.

Messages

A MessageDescription instance maps to a wsdl:message that is referenced by a wsdl:portType/wsdl:operation/wsdl:input or a wsdl:portType/wsdl:operation/wsdl:output message in an operation. A MessageDescription has a body and headers.

Properties WSDL Mapping
Action The SOAP or WS-Addressing action for the message.

Note that operations that use the Action string "*" are not represented in WSDL.
Direction MessageDirection.Input maps to wsdl:input.

MessageDirection.Output maps to wsdl:output.
ProtectionLevel Protection assertions in security policy attached to the wsdl:message definition for this message.
Body The message body for the message.
Headers The headers for the message.
ContractDescription.Name, OperationContract.Name On export, used to derive the wsdl:message/@name value.

Message Body

A MessageBodyDescription instance maps to the wsdl:message/wsdl:part definitions for the body of a message. The message body may be wrapped or bare.

Properties WSDL Mapping
WrapperName If the style is not RPC, then the WrapperName maps to the element name referenced by the wsdl:message/wsdl:part with @name set to "parameters".
WrapperNamespace If the style is not RPC, then the WrapperNamespace maps to the element namespace for the wsdl:message/wsdl:part with @name set to "parameters".
Parts The message parts for this message body.
ReturnValue The child element of the wrapper element if a wrapper element exists (document wrapped style, or RPC style), otherwise the first wsdl:message/wsdl:part in the message.

Message Parts

A MessagePartDescription instance maps to a wsdl:message/wsdl:part and the XML schema type or element that the message part points to.

Properties WSDL mapping
Name The wsd:message/wsdl:part/@name value for the message part and the name of the element that the message part points to.
Namespace The namespace of the element that the message part points to.
Index The index of the wsdl:message/wsdl:part for the message.
ProtectionLevel Protection assertions in security policy attached to the wsdl:message definition for this message part. The policy is parameterized to point to the specific message part.
MessageType The XML Schema type of the element that the message part points to.

Message Headers

A MessageHeaderDescription instance is a message part that also maps to a soap:header binding for the message part.

Faults

A FaultDescription instance maps to a wsdl:portType/wsdl:operation/wsdl:fault definition and its associated wsdl:message definition. The wsdl:message is added to the same target namespace as its associated WSDL port type. The wsdl:message has a single message part named "detail" that points to the XML Schema element that corresponds to the DefaultType property value for the FaultDescription instance.

Properties WSDL mapping
Name The wsdl:portType/wsdl:operation/wsdl:fault/@name value for the fault.
Namespace The namespace of the XML Schema element that the fault detail message part points to.
Action The SOAP or WS-Addressing action for the fault.
ProtectionLevel Protection assertions in security policy attached to the wsdl:message definition for this fault.
DetailType The XML Schema type of the element that the detail message part points to.
Name, ContractDescription.Name, OperationDescription.Name, Used to derive the wsdl:message/@name value for the fault message.

See also