MetadataImporter 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將中繼資料匯入 ServiceEndpoint 物件。
public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
- 繼承
-
MetadataImporter
- 衍生
範例
下列範例會顯示使用 System.ServiceModel.Description.WsdlImporter 衍生類別 (Derived Class) 匯入中繼資料的用法,方法為使用自訂狀態、檢查 Errors 屬性、將匯入的中繼資料編譯為 Managed 型別,然後將結果儲存至程式碼檔案。
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();
}
備註
您可以使用 MetadataImporter 抽象類別 (Abstract Class) 的實作匯入服務中繼資料。 衍生自 類別的類型 MetadataImporter 會實作匯入元資料格式的支援,這些格式利用 Windows Communication Foundation (WCF) 中的WS-Policy匯入邏輯。
MetadataImporter 實作會收集附加至 System.ServiceModel.Description.PolicyConversionContext 物件內服務中繼資料的原則運算式。 MetadataImporter 接著會呼叫 System.ServiceModel.Description.IPolicyImportExtension 屬性中的 MetadataImporter.PolicyImportExtensions 介面實作,將原則當成匯入中繼資料作業的一部分來處理。
您可以將自己的 MetadataImporter 介面實作新增至 System.ServiceModel.Description.IPolicyImportExtension 執行個體上的 MetadataImporter.PolicyImportExtensions 屬性,以便在將新原則判斷提示匯入 MetadataImporter 時提供更多支援。 或者,您可以在應用程式組態檔中註冊自己的原則匯入延伸。
類型 System.ServiceModel.Description.WsdlImporter 是 WCF 隨附之 MetadataImporter 抽象類別的實作。 System.ServiceModel.Description.WsdlImporter 型別會匯入具有與 System.ServiceModel.Description.MetadataSet 物件組合在一起之附加原則的 WSDL 中繼資料。
您可以實作 System.ServiceModel.Description.IWsdlImportExtension 介面,然後將實作新增至 WsdlImporter.WsdlImportExtensions 執行個體上的 System.ServiceModel.Description.WsdlImporter 屬性中,以便在匯入 WSDL 延伸時提供更多支援。 System.ServiceModel.Description.WsdlImporter 也可以將 System.ServiceModel.Description.IWsdlImportExtension 介面 (在您的應用程式組態檔中註冊) 的實作載入。
注意
由於 MetadataImporter 是內部建構函式,在此版本中無法自 MetadataImporter 衍生。
屬性
Errors |
取得值,這個值指出匯入中繼資料時是否發生錯誤。 |
KnownContracts |
依匯入工具已知的名稱取得合約字典。 |
PolicyImportExtensions |
取得原則匯入工具的集合,匯入工具會呼叫此集合以處理原則判斷提示。 |
State |
取得或設定匯入中繼資料時使用的物件集合。 |
方法
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
ImportAllContracts() |
在衍生類別中覆寫時,傳回從中繼資料匯入的合約集合。 |
ImportAllEndpoints() |
在衍生類別中覆寫時,傳回中繼資料內的所有端點。 |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
ToString() |
傳回代表目前物件的字串。 (繼承來源 Object) |