服务描述和 WSDL 参考

本主题介绍 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实例映射到wsdl:service元素。 ServiceDescription 实例包含 ServiceEndpoint 实例的集合,其中每个实例都映射到单独的 wsdl:port 元素。

性能 WSDL 映射
Name 服务的 wsdl:service/@name 值。
Namespace 服务的 wsdl:service 定义的 targetNamespace。
Endpoints 服务的 wsdl:port 定义。

ServiceEndpoint

ServiceEndpoint实例映射到wsdl:port元素。 ServiceEndpoint实例包含地址、绑定和协定。

实现 IWsdlExportExtension 接口的终结点行为可以修改它们所附加到的终结点的 wsdl:port 元素。

性能 WSDL 映射
Name 终结点的 wsdl:port/@name 值和终结点绑定的 wsdl:binding/@name 值。
Address 终结点的 wsdl:port 定义的地址。

终结点的传输方式决定了地址的格式。 例如,对于 WCF 支持的传输,它可以是 SOAP 地址或终结点引用。
Binding 终结点的 wsdl:binding 定义。

wsdl:binding定义不同,WCF中的绑定并不限于任何特定的契约。
Contract 终结点的 wsdl:portType 定义。
Behaviors 实现 IWsdlExportExtension 接口的终结点行为可以修改终结点的 wsdl:port

绑定

ServiceEndpoint 实例的绑定实例映射到 wsdl:binding 定义。 与必须与特定wsdl:binding定义关联的wsdl:portType定义不同,WCF 绑定不依赖于任何协定。

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

性能 WSDL 映射
Name 在终结点的默认名称中使用,该名称是以下划线分隔追加的协定名称的绑定名称。
Namespace targetNamespace 定义的 wsdl:binding

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

指定后 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:portTypeContractDescription 实例描述给定协定的所有操作。

性能 WSDL 映射
Name 协定的 wsdl:portType/@name 值。
Namespace wsdl:portType 定义的 targetNamespace。
SessionMode 协定的 wsdl:portType/@msc:usingSession 值。 此属性是 WSDL 1.1 的 WCF 扩展。
Operations 协定的 wsdl:operation 定义。

运营

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

涉及如何将OperationDescription映射到WSDL文档的两种操作行为是:DataContractSerializerOperationBehaviorXmlSerializerOperationBehavior

性能 WSDL 映射
Name 操作的 wsdl:portType/wsdl:operation/@name 值。
ProtectionLevel 附加到此操作的 wsdl:binding/wsdl:operation 消息的安全策略中的保护断言。
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:inputwsdl:portType/wsdl:operation/wsdl:output 消息。
Faults wsdl:portType / wsdl:operation / wsdl:fault操作的定义。
Behaviors DataContractSerializerOperationBehaviorXmlSerializerOperationBehavior负责处理操作绑定和操作消息。

DataContractSerializerOperationBehavior

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

性能 WSDL 映射
DataContractFormatAttribute 此特性的 Style 属性映射到操作的 wsdl:binding/wsdl:operation/soap:operation/@style 值。

DataContractSerializerOperationBehavior 仅支持 WSDL 中架构类型的文字用法。

XmlSerializerOperationBehavior

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

性能 WSDL 映射
XmlSerializerFormatAttribute 此特性的 Style 属性映射到操作的 wsdl:binding/wsdl:operation/soap:operation/@style 值。

此特性的 Use 属性映射到操作中所有消息的 wsdl:binding/wsdl:operation/soap:operation/*/@use 值。

消息

在一个操作中,MessageDescription实例映射到由wsdl:messagewsdl:portType/wsdl:operation/或wsdl:inputwsdl:portType/wsdl:operation/消息引用的wsdl:outputMessageDescription 包含正文和标头。

性能 WSDL 映射
Action 消息的 SOAP 或 WS-Addressing 操作。

请注意,使用 Action 字符串“*”的操作未在 WSDL 中表示。
Direction MessageDirection.Input 映射到 wsdl:input

MessageDirection.Output 映射到 wsdl:output
ProtectionLevel 附加到此消息的 wsdl:message 定义的安全策略中的保护断言。
Body 消息的消息正文。
Headers 消息的标头。
ContractDescription.NameOperationContract.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 映射
Name wsd:message / wsdl:part消息部件的 /@name 值以及消息部件指向的元素的名称。
Namespace 消息部件指向的元素的命名空间。
Index 消息的 wsdl:message/wsdl:part 的索引。
ProtectionLevel 附加到此消息部分的 wsdl:message 定义的安全策略中的保护断言。 将策略参数化为指向特定消息部分。
MessageType 消息部件指向的元素的 XML 架构类型。

邮件头

MessageHeaderDescription 实例是同时还映射到消息部分的 soap:header 绑定的消息部分。

故障

FaultDescription实例映射到wsdl:portType/wsdl:operation/wsdl:fault定义及其关联的wsdl:message定义。 将 wsdl:message 添加到与其关联的 WSDL 端口类型相同的目标命名空间。 wsdl:message具有一个名为“detail”的消息部件,该部分指向对应于DefaultType实例属性值的 FaultDescription XML 架构元素。

性能 WSDL 映射
Name 错误的 wsdl:portType/wsdl:operation/wsdl:fault/@name 值。
Namespace 错误详细信息消息部分指向的 XML 架构元素的命名空间。
Action 错误的 SOAP 或 WS-Addressing 操作。
ProtectionLevel 附加到此错误的 wsdl:message 定义的安全策略中的保护断言。
DetailType 详细信息消息部件指向的元素的 XML 架构类型。
Name, ContractDescription.Name, OperationDescription.Name, 用于派生错误消息的 wsdl:message/@name 值。

另请参阅