Sdílet prostřednictvím


MetadataImporter Třída

Definice

Importuje metadata do ServiceEndpoint objektů.

public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
Dědičnost
MetadataImporter
Odvozené

Příklady

Následující příklad ukazuje použití System.ServiceModel.Description.WsdlImporter odvozené třídy k importu metadat pomocí vlastního stavu, kontrolu Errors vlastnosti, kompilace importovaných metadat do spravovaných typů a uložení výsledku do souboru kódu.

  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();
  }

Poznámky

K importu MetadataImporter metadat služby použijte implementaci abstraktní třídy. Typy odvozené z MetadataImporter třídy implementují podporu importu formátů metadat, které využívají logiku importu WS-Policy ve Windows Communication Foundation (WCF).

Implementace MetadataImporter shromažďuje výrazy zásad připojené k metadatům služby v objektu System.ServiceModel.Description.PolicyConversionContext . Potom MetadataImporter zpracuje zásady jako součást importu metadat voláním implementací System.ServiceModel.Description.IPolicyImportExtension rozhraní ve MetadataImporter.PolicyImportExtensions vlastnosti.

Podporu importu nových kontrolních výrazů zásad do objektu MetadataImporter můžete přidat přidáním vlastní implementace System.ServiceModel.Description.IPolicyImportExtension rozhraní do MetadataImporter.PolicyImportExtensions vlastnosti v MetadataImporter instanci. Případně můžete rozšíření importu zásad zaregistrovat v konfiguračním souboru aplikace.

Typ System.ServiceModel.Description.WsdlImporter je implementace MetadataImporter abstraktní třídy, která je součástí WCF. Typ System.ServiceModel.Description.WsdlImporter importuje metadata WSDL s připojenými zásadami, které jsou součástí objektu System.ServiceModel.Description.MetadataSet .

Podporu importu rozšíření WSDL můžete přidat implementací System.ServiceModel.Description.IWsdlImportExtension rozhraní a následným přidáním implementace do WsdlImporter.WsdlImportExtensions vlastnosti ve vaší System.ServiceModel.Description.WsdlImporter instanci. System.ServiceModel.Description.WsdlImporter může také načíst implementace rozhraní registrovaných v konfiguračním souboru vaší aplikace.

Poznámka:

Vzhledem k tomu, že MetadataImporter konstruktor je interní, nelze odvodit z MetadataImporter této verze.

Vlastnosti

Name Description
Errors

Získá hodnotu, která označuje, zda došlo k chybám importu metadat.

KnownContracts

Získá slovník kontraktů podle názvu, o který dovozce ví.

PolicyImportExtensions

Získá kolekci dovozců zásad, které dovozce volá ke zpracování kontrolních výrazů zásad.

State

Získá nebo nastaví kolekci objektů používaných při importu metadat.

Metody

Name Description
Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
ImportAllContracts()

Při přepsání v odvozené třídě vrátí kolekci kontraktů importovaných z metadat.

ImportAllEndpoints()

Při přepsání v odvozené třídě vrátí všechny koncové body v metadatech.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro