本主题介绍 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 映射