MetadataImporter 類別

定義

將中繼資料匯入 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)

適用於