本主题介绍 Windows Communication Foundation (WCF) 如何在 Web Services 描述语言 (WSDL) 文档和 ServiceDescription 实例之间进行映射。

ServiceDescription 如何映射到 WSDL 1.1

可使用 WCF 为服务从 ServiceDescription 实例导出 WSDL 文档。 发布元数据终结点时,将为服务自动生成 WSDL 文档。

还可以使用 ServiceEndpoint 类型从 WSDL 文档导入 ContractDescription 实例、 Binding 实例和 WsdlImporter 实例。

由 WCF 导出的 WSDL 文档将从外部 XML 架构文档导入使用的所有 XML 架构定义。 为服务中数据类型使用的每个目标命名空间导出单独的 XML 架构文档。 同样,为服务协定使用的每个目标命名空间导出单独的 WSDL 文档。

ServiceDescription

ServiceDescription 实例映射到 wsdl:service 元素。 ServiceDescription 实例包含 ServiceEndpoint 实例的集合,其中每个实例都映射到单独的 wsdl:port 元素。

WSDL 映射

ServiceEndpoint 实例的绑定实例映射到 wsdl:binding 定义。 wsdl:binding 定义与 WCF 绑定不同,前者必须与特定的 wsdl:portType 定义相关联,而后者独立于任何协定。

绑定由绑定元素的集合组成。 每个元素描述终结点与客户端的通信方式的某一方面。 另外,绑定还具有一个 MessageVersion ,指示终结点的 EnvelopeVersion AddressingVersion

WSDL 映射 Namespace targetNamespace 定义的 wsdl:binding

导入时,如果将策略附加到 WSDL 端口,则导入的绑定命名空间将映射到 targetNamespace 定义的 wsdl:port BindingElementCollection ,由 CreateBindingElements () 方法返回 wsdl:binding 定义的各种域特定的扩展,通常是策略断言。 MessageVersion 终结点的 EnvelopeVersion AddressingVersion

如果指定 MessageVersion.None ,则 WSDL 绑定不包含 SOAP 绑定,并且 WSDL 端口不包含 WS-Addressing 内容。 该设置通常用于 Plain Old XML (POX) 终结点。

BindingElements

终结点绑定的绑定元素映射到 wsdl:binding 中的各种 WSDL 扩展,如策略断言。

绑定的 TransportBindingElement 为 SOAP 绑定确定传输统一资源标识符 (URI)。

AddressingVersion

绑定上的 AddressingVersion 映射到 wsd:port 中使用的寻址版本。 WCF 支持 SOAP 1.1 和 SOAP 1.2 地址以及 WS-Addressing 08/2004 和 WS-Addressing 1.0 终结点引用。

EnvelopeVersion

绑定上的 EnvelopeVersion 映射到 wsdl:binding 中使用的 SOAP 的版本。 WCF 支持 SOAP 1.1 和 SOAP 1.2 绑定。

ContractDescription 实例的 ServiceEndpoint 实例映射到 wsdl:portType ContractDescription 实例描述给定协定的所有操作。

WSDL 映射

Operations

OperationDescription 实例映射到 wsdl:portType / wsdl:operation OperationDescription 包含用于描述操作消息的 MessageDescription 实例的集合。

如下两个操作行为广泛地参与 OperationDescription 到 WSDL 文档的映射方式: DataContractSerializerOperationBehavior XmlSerializerOperationBehavior

WSDL 映射 IsInitiating 操作的 wsdl:portType / wsdl:operation /@msc:isInitiating 值。 此属性是 WSDL 1.1 的 WCF 扩展。 IsTerminating 操作的 wsdl:portType / wsdl:operation /@msc:isTerminating 值。 此属性是 WSDL 1.1 的 WCF 扩展。 Messages 操作的 wsdl:portType / wsdl:operation / wsdl:input wsdl:portType / wsdl:operation / wsdl:output 消息。 Faults 操作的 wsdl:portType / wsdl:operation / wsdl:fault 定义。 Behaviors DataContractSerializerOperationBehavior XmlSerializerOperationBehavior 处理操作绑定和操作消息。

DataContractSerializerOperationBehavior

操作的 DataContractSerializerOperationBehavior 是用于为该操作导出 WSDL 消息和绑定的 IWsdlExportExtension 实现。 XML 架构类型是使用 XsdDataContractExporter 导出的。 DataContractSerializerOperationBehavior 还为该操作确定用途、样式和要使用的架构导出程序与导入程序。

WSDL 映射 Direction MessageDirection.Input 映射到 wsdl:input

MessageDirection.Output 映射到 wsdl:output ProtectionLevel 附加到此消息的 wsdl:message 定义的安全策略中的保护断言。 消息的消息正文。 Headers 消息的标头。 ContractDescription.Name , OperationContract.Name 导出时,用于派生 wsdl:message /@name 值。

MessageBodyDescription 实例映射到消息正文的 wsdl:message / wsdl:part 定义。 消息正文可以包装也可以裸露。

WSDL 映射 WrapperName 如果样式不是 RPC,则 WrapperName 将映射到由 wsdl:message / wsdl:part (其 @name 设置为“parameters”)引用的元素名称。 WrapperNamespace 如果样式不是 RPC,则 WrapperNamespace 将映射到 wsdl:message / wsdl:part (其 @name 设置为“parameters”)的元素命名空间。 Parts 此消息正文的消息部分。 ReturnValue 如果存在包装元素(文档包装样式或 RPC 样式),则为包装元素的子元素,否则为消息中的第一个 wsdl:message / wsdl:part

MessagePartDescription 实例映射到 wsdl:message / wsdl:part 和消息部分所指向的 XML 架构类型或元素。

WSDL 映射