MetadataImporter Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Importiert Metadaten in ServiceEndpoint-Objekte.
public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
- Vererbung
-
MetadataImporter
- Abgeleitet
Beispiele
Im folgenden Beispiel werden die Verwendung der abgeleiteten System.ServiceModel.Description.WsdlImporter-Klasse zum Importieren von Metadaten mit einem benutzerdefinierten Zustand, die Überprüfung der Errors-Eigenschaft, die Kompilierung der importierten Metadaten in verwaltete Typen und die Speicherung der Ergebnisse in einer Codedatei veranschaulicht.
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();
}
Hinweise
Verwenden Sie eine Implementierung der abstrakten MetadataImporter-Klasse, um Metadaten von Diensten zu importieren. Typen, die von der -Klasse abgeleitet werden, implementieren Unterstützung für den MetadataImporter Import von Metadatenformaten, die die WS-Policy Importlogik in Windows Communication Foundation (WCF) nutzen.
Eine MetadataImporter-Implementierung sammelt die an die Dienstmetadaten angefügten Richtlinienausdrücke in einem System.ServiceModel.Description.PolicyConversionContext-Objekt. Der MetadataImporter verarbeitet die Richtlinien dann im Rahmen des Importvorgangs, indem er die Implementierungen der System.ServiceModel.Description.IPolicyImportExtension-Schnittstelle in der MetadataImporter.PolicyImportExtensions-Eigenschaft aufruft.
Sie können einen MetadataImporter um Unterstützung für den Import neuer Richtlinienassertionen erweitern, indem Sie Ihre eigene Implementierung der System.ServiceModel.Description.IPolicyImportExtension-Schnittstelle der MetadataImporter.PolicyImportExtensions-Eigenschaft in einer MetadataImporter-Instanz hinzufügen. Sie können stattdessen die Richtlinienimporterweiterung auch in der Konfigurationsdatei der Anwendung registrieren.
Der System.ServiceModel.Description.WsdlImporter Typ ist die Implementierung der abstrakten Klasse, die MetadataImporter in WCF enthalten ist. Der System.ServiceModel.Description.WsdlImporter-Typ importiert WSDL-Metadaten mit angefügten Richtlinien, die in einem System.ServiceModel.Description.MetadataSet-Objekt zusammengefasst sind.
Um Unterstützung für das Importieren von WSDL-Erweiterungen hinzuzufügen, implementieren Sie die System.ServiceModel.Description.IWsdlImportExtension-Schnittstelle, und fügen Sie diese Implementierung der WsdlImporter.WsdlImportExtensions-Eigenschaft der System.ServiceModel.Description.WsdlImporter-Instanz hinzu. Der System.ServiceModel.Description.WsdlImporter kann auch Implementierungen der System.ServiceModel.Description.IWsdlImportExtension-Schnittstelle laden, die in der Konfigurationsdatei der Anwendung registriert sind.
Hinweis
Da der MetadataImporter-Konstruktor intern ist, können Sie in dieser Version nicht vom MetadataImporter ableiten.
Eigenschaften
Errors |
Ruft einen Wert ab, der angibt, ob beim Importieren der Metadaten Fehler aufgetreten sind. |
KnownContracts |
Ruft ein Wörterbuch mit Verträgen nach Namen ab, die der Importer kennt. |
PolicyImportExtensions |
Ruft eine Auflistung von Richtlinienimportern ab, die der Importer zum Verarbeiten von Richtlinienassertionen aufruft. |
State |
Ruft eine Auflistung von Objekten ab, die beim Importieren von Metadaten verwendet wird, oder legt diese fest. |
Methoden
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
ImportAllContracts() |
Gibt beim Überschreiben in einer abgeleiteten Klasse eine Auflistung der Verträge zurück, die aus den Metadaten importiert werden. |
ImportAllEndpoints() |
Gibt beim Überschreiben in einer abgeleiteten Klasse alle Endpunkte in den Metadaten zurück. |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |