MetadataImporter 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将元数据导入 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) |