本主题介绍 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,指示终结点的 EnvelopeVersion 和 AddressingVersion。
性能 | WSDL 映射 |
---|---|
Name |
在终结点的默认名称中使用,该名称是以下划线分隔追加的协定名称的绑定名称。 |
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 映射 |
---|---|
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文档的两种操作行为是:DataContractSerializerOperationBehavior
和XmlSerializerOperationBehavior
。
性能 | 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:input 和 wsdl:portType /wsdl:operation /wsdl:output 消息。 |
Faults |
wsdl:portType
/
wsdl:operation
/
wsdl:fault 操作的定义。 |
Behaviors |
DataContractSerializerOperationBehavior 和XmlSerializerOperationBehavior 负责处理操作绑定和操作消息。 |
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:message
wsdl:portType
/wsdl:operation
/或wsdl:input
wsdl:portType
/wsdl:operation
/消息引用的wsdl:output
。
MessageDescription
包含正文和标头。
性能 | WSDL 映射 |
---|---|
Action |
消息的 SOAP 或 WS-Addressing 操作。 请注意,使用 Action 字符串“*”的操作未在 WSDL 中表示。 |
Direction |
MessageDirection.Input 映射到 wsdl:input 。MessageDirection.Output 映射到 wsdl:output 。 |
ProtectionLevel |
附加到此消息的 wsdl:message 定义的安全策略中的保护断言。 |
Body |
消息的消息正文。 |
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 映射 |
---|---|
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 值。 |