ServiceDescription 與 WSDL 參考
本主題描述 Windows Communication Foundation (WCF) 如何將 Web 服務描述語言 (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 對應 |
---|---|
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 定義的各種網域特定延伸項目,一般來說是原則判斷提示 (Assertion)。 |
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 定義。 |
Operations
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 訊息和繫結。 將會使用 XsdDataContractExporter
匯出 XML 結構描述型別。 DataContractSerializerOperationBehavior
也會判斷用於該作業的用法、樣式和結構描述匯出工具與匯入工具。
屬性 | WSDL 對應 |
---|---|
DataContractFormatAttribute |
這個屬性 (attribute) 的 Style 屬性 (property),會對應至作業的 wsdl:binding /wsdl:operation /soap:operation /@style 值。DataContractSerializerOperationBehavior 在 WSDL 中僅支援結構描述型別的原來用法。 |
XmlSerializerOperationBehavior
作業的 XmlSerializerOperationBehavior
是 IWsdlExportExtension
實作,會針對作業匯出 WSDL 訊息和繫結。 將會使用 XmlSchemaExporter
匯出 XML 結構描述型別。 XmlSerializerOperationBehavior
也會判斷用於該作業的用法、樣式和結構描述匯出工具與匯入工具。
屬性 | WSDL 對應 |
---|---|
XmlSerializerFormatAttribute |
這個屬性 (attribute) 的 Style 屬性 (property),會對應至作業的 wsdl:binding /wsdl:operation /soap:operation /@style 值。這個屬性 (attribute) 的 Use 屬性 (property),會對應至作業中所有訊息的 wsdl:binding /wsdl:operation /soap:operation /*/@use 值。 |
訊息
MessageDescription
執行個體會對應至作業中 wsdl:portType
/wsdl:operation
/wsdl:input
或 wsdl:portType
/wsdl:operation
/wsdl:output
訊息所參考的一個 wsdl:message
。 MessageDescription
中具有本文和標頭。
屬性 | WSDL 對應 |
---|---|
Action |
訊息的 SOAP 或 WS-Addressing 動作。 請注意,使用動作字串 "*" 的作業不會以 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 會對應至其 @name 設定為「參數」之 wsdl:message /wsdl:part 所參考的元素名稱。 |
WrapperNamespace |
如果樣式並非 RPC,則 WrapperNamespace 會對應至其 @name 設定為「參數」之 wsdl:message /wsdl:part 所參考的元素命名空間。 |
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
具有名稱為「詳細資訊」的單一訊息部分,而這個部分會指向對應至 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 值。 |