WsdlImporter 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
与 WS-Policy 附件一起导入 Web Services 描述语言 (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 类型将尝试附加到不同 WSDL 策略主题的最多 32 个备用策略组合。 如果没有完全导入任何组合,则使用第一个组合来构造部分自定义绑定。
除了这些方法和属性外,WsdlImporter 还实现支持导入绑定信息和属性的方法,这些绑定信息和属性提供对任何策略文档、WSDL 文档、WSDL 扩展及 XML 架构文档的访问。 有关扩展 WsdlImporter 以支持自定义 WSDL 元素的信息,请参见 IWsdlImportExtension。
通常,分三步使用 WsdlImporter 类。
创建一个 WsdlImporter 对象,并将 MetadataSet 对象传递给构造函数。
调用适当的
Import
方法来检索结果。检查 Errors 属性,以确定是否有任何导入错误。
备注
当导入 WSDL 端口类型时,如果端口类型的 QName 与 KnownContracts 词典中的某个条目匹配,则不导入该端口类型,而是改用已知协定。
在调用其中一个导入方法之前,不会从 WsdlImporter 属性中返回值。 可以通过编程方式或使用客户端配置 <wsdlImporters> 元素加载WsdlImporter自定义System.ServiceModel.Description.IWsdlImportExtension对象。
已作为服务终结点导入的元数据无法用于创建运行时或导出元数据,因为导入的终结点不包含托管类型信息。 若要使用元数据创建客户端或服务运行时,或者若要生成元数据,您必须先从元数据中生成和编译代码,然后使用该类型信息创建使用 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) |