Share via


匯出和匯入中繼資料

在 Windows Communication Foundation (WCF) 中,匯出中繼資料是一項流程,描述服務端點並將其投射至平行標準化表示,使得用戶端了解如何使用服務。 匯入服務中繼資料是從服務中繼資料產生 ServiceEndpoint 執行個體或組件的程序。

匯出中繼資料

若要從 System.ServiceModel.Description.ServiceEndpoint 執行個體匯出中繼資料,請使用 MetadataExporter 抽象類別的實作。 WsdlExporter 類型是包含在 WCF 中的 MetadataExporter 抽象類別實作。

System.ServiceModel.Description.WsdlExporter 型別會使用在 MetadataSet 執行個體中封裝的附加原則運算式來產生 Web 服務描述語言 (WSDL) 中繼資料。 您可以使用 System.ServiceModel.Description.WsdlExporter 執行個體來反覆匯出 ContractDescription 物件和 ServiceEndpoint 物件的中繼資料。 您也可以匯出 ServiceEndpoint 物件的集合,並將之與特定服務名稱進行關聯。

注意

您只能使用 WsdlExporter 從包含 Common Language Runtime (CLR) 型別資訊的 ContractDescription 執行個體中匯出中繼資料,例如透過 ContractDescription 方法建立的 ContractDescription.GetContract 執行個體,或是建立為 ServiceDescription 執行個體的 ServiceHost 一部分。 對於從服務中繼資料匯入或是未使用型別資訊建構的 WsdlExporter 執行個體,則無法使用 ContractDescription 從這類執行個體匯出中繼資料。

匯入中繼資料

匯入 WSDL 文件

若要在 WCF 中匯入服務中繼資料,請使用 MetadataImporter 抽象類別的實作。 System.ServiceModel.Description.WsdlImporter 類型是包含在 WCF 中的 MetadataImporter 抽象類別實作。 WsdlImporter 型別會匯入 WSDL 中繼資料,其中包含與 MetadataSet 物件組合在一起的附加原則。

WsdlImporter 型別可讓您控制匯入中繼資料的方式。 您可以匯入所有端點、所有繫結或是所有合約。 您可以匯入與特定 WSDL 服務、繫結或連接埠類型相關聯的所有端點。 您也可以匯入特定 WSDL 連接埠的端點、特定 WSDL 繫結的繫結,或是特定 WSDL 連接埠類型的合約。

同時,WsdlImporter 會公開 KnownContracts 屬性,讓您指定不需要匯入的合約集。 WsdlImporter 會使用 KnownContracts 屬性中的合約,而不是匯入合約 (內含來自中繼資料的相同限定名稱)。

匯入原則

WsdlImporter 型別會收集附加至訊息、作業與端點原則主體的原則運算式,然後使用 IPolicyImportExtension 集合中的 PolicyImportExtensions 實作來匯入原則運算式。

原則匯入邏輯會自動處理位於相同 WSDL 文件中的原則運算式之原則參考,並使用 wsu:Idxml:id 屬性加以識別。 原則匯入邏輯會將原則運算式的規模限制在 4096 個節點來保護應用程式免於受到循環原則參考,當中的節點為下列其中一個項目:wsp:Policywsp:Allwsp:ExactlyOnewsp:policyReference

原則匯入邏輯同時會自動正規化原則運算式。 巢狀原則運算式和 wsp:Optional 屬性不會正規化。 所能完成的正規化處理數量將限制在 4096 個步驟,其中每個步驟都會產生原則判斷提示,或是 wsp:ExactlyOne 項目的子項目。

WsdlImporter 型別最多會嘗試 32 種附加至不同 WSDL 原則主體的各種原則替代方案組合。 如果沒有組合可以正常匯入,就會使用第一個組合來建構部分自訂繫結。

錯誤處理

MetadataExporterMetadataImporter 型別都會公開 Errors 屬性,此屬性會分別包含匯出或匯入處理期間所遭遇的錯誤與警告訊息集合,以便在實作工具時使用。

WsdlImporter 型別一般會針對匯入處理期間所攔截的例外狀況擲回例外狀況,並將對應的錯誤新增至其 Errors 屬性中。 但是,ImportAllContractsImportAllBindingsImportAllEndpointsImportEndpoints 方法並不會擲回這些例外狀況,因此您必須檢查 Errors 屬性,判斷在呼叫這些方法時是否發生任何問題。

WsdlExporter 型別會在匯出處理期間重新擲回所有攔截到的例外狀況。 這些例外狀況不會在 Errors 屬性中當成錯誤來擷取。 一旦 WsdlExporter 擲回例外狀況,就會呈現錯誤狀態而無法重複使用。 當因為使用萬用字元動作而無法匯出作業,以及當碰到重複的繫結名稱時,WsdlExporter 就會將警告新增至自身的 Errors 屬性中。

本節內容

如何:將中繼資料匯入服務端點
說明如何將下載的中繼資料匯入描述物件中。

如何:從服務端點匯出中繼資料
說明如何將描述物件匯出至中繼資料。

ServiceDescription 與 WSDL 參考
說明描述物件與 WSDL 之間的對應。

如何:使用 Svcutil.exe 來匯出已編譯服務程式碼的中繼資料
說明使用 Svcutil.exe 來匯出編譯組件中有關服務、合約與資料型別的中繼資料。

資料合約結構描述參考
說明 DataContractSerializer 用來描述 XML 序列化之 Common Language Runtime (CLR) 型別的 XML 結構描述 (XSD) 子集。

參考

WsdlExporter

WsdlImporter

另請參閱