MetadataImporter 类

定义

将元数据导入 ServiceEndpoint 对象。

public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
继承
MetadataImporter
派生

示例

下面的示例演示如何通过使用自定义语句、检查 System.ServiceModel.Description.WsdlImporter 属性、将导入元数据编译为托管类型,并将结果保存到代码文件来使用 Errors 派生类导入元数据。

  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 抽象类的实现导入服务元数据。 从 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)

适用于