WsdlImporter 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
使用 WS-Policy 附件匯入 Web 服務描述語言 (WSDL) 1.1 中繼資料。
public ref class WsdlImporter : System::ServiceModel::Description::MetadataImporter
public class WsdlImporter : System.ServiceModel.Description.MetadataImporter
type WsdlImporter = class
inherit MetadataImporter
Public Class WsdlImporter
Inherits MetadataImporter
- 繼承
範例
下列程式碼範例會示範如何使用 WsdlImporter 來新增自訂 System.Runtime.Serialization.IDataContractSurrogate、匯入所有合約、編譯這些合約,並將它們儲存成檔案。
static void GenerateCSCodeForService(EndpointAddress metadataAddress, string outputFile)
{
MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress);
mexClient.ResolveMetadataReferences = true;
MetadataSet metaDocs = mexClient.GetMetadata();
WsdlImporter importer = new WsdlImporter(metaDocs);
ServiceContractGenerator generator = new ServiceContractGenerator();
// Add our custom DCAnnotationSurrogate
// to write XSD annotations into the comments.
object dataContractImporter;
XsdDataContractImporter xsdDCImporter;
if (!importer.State.TryGetValue(typeof(XsdDataContractImporter), out dataContractImporter))
{
Console.WriteLine("Couldn't find the XsdDataContractImporter! Adding custom importer.");
xsdDCImporter = new XsdDataContractImporter();
xsdDCImporter.Options = new ImportOptions();
importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter);
}
else
{
xsdDCImporter = (XsdDataContractImporter)dataContractImporter;
if (xsdDCImporter.Options == null)
{
Console.WriteLine("There were no ImportOptions on the importer.");
xsdDCImporter.Options = new ImportOptions();
}
}
xsdDCImporter.Options.DataContractSurrogate = new DCAnnotationSurrogate();
// Uncomment the following code if you are going to do your work programmatically rather than add
// the WsdlDocumentationImporters through a configuration file.
/*
// The following code inserts a custom WsdlImporter without removing the other
// importers already in the collection.
System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlImportExtensions;
System.Collections.Generic.List<IWsdlImportExtension> newExts
= new System.Collections.Generic.List<IWsdlImportExtension>();
foreach (IWsdlImportExtension ext in exts)
{
Console.WriteLine("Default WSDL import extensions: {0}", ext.GetType().Name);
newExts.Add(ext);
}
newExts.Add(new WsdlDocumentationImporter());
System.Collections.Generic.IEnumerable<IPolicyImportExtension> polExts = importer.PolicyImportExtensions;
importer = new WsdlImporter(metaDocs, polExts, newExts);
*/
System.Collections.ObjectModel.Collection<ContractDescription> contracts
= importer.ImportAllContracts();
importer.ImportAllEndpoints();
foreach (ContractDescription contract in contracts)
{
generator.GenerateServiceContractType(contract);
}
if (generator.Errors.Count != 0)
throw new Exception("There were errors during code compilation.");
// Write the code dom
System.CodeDom.Compiler.CodeGeneratorOptions options
= new System.CodeDom.Compiler.CodeGeneratorOptions();
options.BracingStyle = "C";
System.CodeDom.Compiler.CodeDomProvider codeDomProvider
= System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
System.CodeDom.Compiler.IndentedTextWriter textWriter
= new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));
codeDomProvider.GenerateCodeFromCompileUnit(
generator.TargetCompileUnit, textWriter, options
);
textWriter.Close();
}
備註
使用 WsdlImporter 類別即可匯入中繼資料,以及將該資訊轉換成代表合約和端點資訊的各種不同類別。
WsdlImporter 的基底類別為 MetadataImporter 類別,它會定義會選擇性匯入合約和端點資訊的方法,並定義可公開任何匯入錯誤、接受有關匯入和轉換程序之型別資訊的屬性。 WsdlImporter 型別會使用來自其父型別的自訂原則匯入工具 (IPolicyImportExtension 實作) 來處理自訂原則陳述式,而使用自己的自訂 WSDL 匯入工具 (IWsdlImportExtension 實作) 來處理自訂 WSDL 項目。 如需詳細資訊,請參閱 擴充中繼資料系統。
當從 WSDL 文件匯入原則時,WsdlImporter 型別會嘗試最多 32 種附加至不同 WSDL 原則主體之原則替代項目的組合。 如果沒有組合可以正常匯入,就會使用第一個組合來建構部分自訂繫結。
除了這些方法和屬性,WsdlImporter 也會實作支援匯入繫結資訊的方法,以及可提供存取任何原則文件、WSDL 文件、WSDL 延伸和 XML 結構描述文件的屬性。 如需有關將 WsdlImporter 擴充成可支援自訂 WSDL 項目的資訊,請參閱 IWsdlImportExtension。
一般來說,WsdlImporter 類別是用於有三個步驟的處理程序。
建立 WsdlImporter 物件,並將 MetadataSet 物件傳遞至建構函式。
呼叫適當的
Import
方法來擷取結果。檢查 Errors 屬性,即可判斷是否有任何匯入錯誤。
注意
當匯入 WSDL 連接埠類型時,如果連接埠類型的 QName 與 KnownContracts 字典中的項目相符,便不會匯入該連接埠類型,而是改用已知的合約。
在呼叫其中一個匯入方法之前,都不會從 WsdlImporter 屬性傳回任何值。 自訂 System.ServiceModel.Description.IWsdlImportExtension 物件可以透過程式設計方式載入 WsdlImporter ,或使用用戶端組態 < wsdlImporters > 元素。
已匯入為服務端點的中繼資料無法用於建立執行階段或匯出中繼資料,因為匯入的端點沒有包含任何 Managed 型別資訊。 若要使用中繼資料來建立用戶端或服務執行階段或產生中繼資料,您必須先從中繼資料產生及編譯程式碼,然後使用該型別資訊來建立使用 System.ServiceModel.Description.ContractDescription 的新 GetContract 物件。
建構函式
WsdlImporter(MetadataSet) |
初始化 WsdlImporter 類別的新執行個體。 |
WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>) |
從指定的中繼資料、自訂原則匯入工具和自訂 WSDL 匯入工具建立 WsdlImporter 物件。 |
WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>, MetadataImporterQuotas) |
從指定的中繼資料、自訂原則匯入工具和自訂 WSDL 匯入工具建立 WsdlImporter 物件。 |
屬性
Errors |
取得值,這個值指出匯入中繼資料時是否發生錯誤。 (繼承來源 MetadataImporter) |
KnownContracts |
依匯入工具已知的名稱取得合約字典。 (繼承來源 MetadataImporter) |
PolicyImportExtensions |
取得原則匯入工具的集合,匯入工具會呼叫此集合以處理原則判斷提示。 (繼承來源 MetadataImporter) |
State |
取得或設定匯入中繼資料時使用的物件集合。 (繼承來源 MetadataImporter) |
WsdlDocuments |
取得一組 ServiceDescription 物件,這些物件會描述中繼資料文件中的合約資訊。 |
WsdlImportExtensions |
取得一組 IWsdlImportExtension 物件,這些物件會用於匯入自訂 WSDL 資訊。 |
XmlSchemas |
取得一組 XmlSchema 物件,這些物件會描述中繼資料中的型別。 |
方法
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
ImportAllBindings() |
傳回一組從中繼資料文件匯入的 Binding 物件。 |
ImportAllContracts() |
傳回一組 ContractDescription 物件,這些物件表示中繼資料文件中的連接埠類型資訊。 |
ImportAllEndpoints() |
傳回表示 WSDL 文件中之端點的 ServiceEndpointCollection。 |
ImportBinding(Binding) |
傳回 Binding 物件,這個物件表示來自一組中繼資料文件的繫結資訊。 |
ImportContract(PortType) |
傳回 ContractDescription 物件,這個物件表示由已指定連接埠類型資訊所找到的中繼資料。 |
ImportEndpoint(Port) |
從一組中繼資料文件傳回 ServiceEndpoint,這個端點會使用來自指定之 Port 物件的資訊。 |
ImportEndpoints(Binding) |
傳回 ServiceEndpointCollection,這個集合表示使用指定之 Binding 的所有 WSDL 連接埠類型。 |
ImportEndpoints(PortType) |
傳回 ServiceEndpointCollection,這個集合表示與已指定 PortType 相關聯的所有 WSDL 連接埠類型。 |
ImportEndpoints(Service) |
傳回 ServiceEndpointCollection,這個集合表示位在已指定 Service 內的所有 WSDL 連接埠類型。 |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
ToString() |
傳回代表目前物件的字串。 (繼承來源 Object) |