WsdlImporter Klasse

Definition

Importiert WSDL 1.1-Metadaten (Web Services Description Language) mit WS-Richtlinienanhängen.

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
Vererbung
WsdlImporter

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie mithilfe des WsdlImporter ein benutzerdefiniertes System.Runtime.Serialization.IDataContractSurrogate hinzugefügt, alle Verträge importiert sowie diese Verträge kompiliert und in einer Datei gespeichert werden.

  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

Mithilfe der WsdlImporter-Klasse können Sie Metadaten importieren und die Informationen in verschiedene Klassen konvertieren, die Vertrags- und Endpunktinformationen darstellen.

Die Basisklasse für WsdlImporter, die MetadataImporter-Klasse, definiert Methoden, die Vertrags- und Endpunktinformationen sowie Eigenschaften, die Importfehler offen legen und für den Import- und Konvertierungsvorgang relevante Typinformationen akzeptieren, selektiv importieren. Der WsdlImporter-Typ verwendet die benutzerdefinierten Richtlinienimportprogramme (IPolicyImportExtension-Implementierungen) des übergeordneten Typs zur Verarbeitung benutzerdefinierter Richtlinienanweisungen und seine eigenen benutzerdefinierten WSDL-Importprogramme (IWsdlImportExtension-Implementierungen) zur Verarbeitung benutzerdefinierter WSDL-Elemente. Ausführliche Informationen finden Sie unter Erweitern des Metadatensystems.

Beim Importieren der Richtlinie aus WSDL-Dokumenten probiert der WsdlImporter-Typ bis zu 32 Kombinationen von Richtlinienalternativen aus, die verschiedenen WSDL-Richtliniensubjekten angehängt sind. Wenn keine Kombination sauber importiert werden kann, wird die erste Kombination zur Erstellung einer teilweise benutzerdefinierten Bindung verwendet.

Zusätzlich zu diesen Methoden und Eigenschaften implementiert WsdlImporter auch Methoden, die den Import von Bindungsinformationen und -eigenschaften unterstützen, die den Zugriff auf Richtliniendokumente, WSDL-Dokumente, WSDL-Erweiterungen und XML-Schemadokumente ermöglichen. Informationen zur Erweiterung von WsdlImporter zur Unterstützung benutzerdefinierter WSDL-Elemente finden Sie unter IWsdlImportExtension.

In der Regel wird die WsdlImporter-Klasse in einem dreistufigen Prozess verwendet.

  1. Erstellen Sie ein WsdlImporter-Objekt, und übergeben Sie ein MetadataSet-Objekt an den Konstruktor.

  2. Rufen Sie die entsprechende Import-Methode auf, um die Ergebnisse abzurufen.

  3. Überprüfen Sie die Errors-Eigenschaft, um festzustellen, ob Importfehler vorliegen.

Hinweis

Wenn beim Importieren von WSDL-Anschlusstypen der QName des Anschlusstyps mit einem Eintrag im KnownContracts-Wörterbuch übereinstimmt, wird der Anschlusstyp nicht importiert und stattdessen der bekannte Vertrag verwendet.

Von den WsdlImporter-Eigenschaften werden erst dann Werte zurückgegeben, wenn eine der Importmethoden aufgerufen wird. Benutzerdefinierte System.ServiceModel.Description.IWsdlImportExtension Objekte können entweder programmgesteuert geladen WsdlImporter werden oder das Clientkonfigurationselement< wsdlImporters> verwenden.

Als Dienstendpunkt importierte Metadaten können nicht zum Erstellen einer Laufzeit oder zum Exportieren von Metadaten verwendet werden, da die importierten Endpunkte keine Informationen zum verwalteten Typ enthalten. Um mithilfe der Metadaten eine Client- oder Dienstlaufzeit oder Metadaten erstellen zu können, müssen Sie zunächst anhand der Metadaten einen Code erzeugen und kompilieren und mithilfe dieser Typinformationen ein neues System.ServiceModel.Description.ContractDescription-Objekt mit GetContract erstellen.

Konstruktoren

WsdlImporter(MetadataSet)

Initialisiert eine neue Instanz der WsdlImporter-Klasse.

WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>)

Erstellt ein WsdlImporter-Objekt anhand der angegebenen Metadaten, benutzerdefinierten Richtlinienimportprogramme und benutzerdefinierten WSDL-Importprogramme.

WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>, MetadataImporterQuotas)

Erstellt ein WsdlImporter-Objekt anhand der angegebenen Metadaten, benutzerdefinierten Richtlinienimportprogramme und benutzerdefinierten WSDL-Importprogramme.

Eigenschaften

Errors

Ruft einen Wert ab, der angibt, ob beim Importieren der Metadaten Fehler aufgetreten sind.

(Geerbt von MetadataImporter)
KnownContracts

Ruft ein Wörterbuch mit Verträgen nach Namen ab, die der Importer kennt.

(Geerbt von MetadataImporter)
PolicyImportExtensions

Ruft eine Auflistung von Richtlinienimportern ab, die der Importer zum Verarbeiten von Richtlinienassertionen aufruft.

(Geerbt von MetadataImporter)
State

Ruft eine Auflistung von Objekten ab, die beim Importieren von Metadaten verwendet wird, oder legt diese fest.

(Geerbt von MetadataImporter)
WsdlDocuments

Ruft einen Satz von ServiceDescription-Objekten ab, die die Vertragsinformationen in den Metadatendokumenten beschreiben.

WsdlImportExtensions

Ruft eine Auflistung von IWsdlImportExtension-Objekten ab, mit denen benutzerdefinierte WSDL-Informationen importiert werden.

XmlSchemas

Ruft einen Satz von XmlSchema-Objekten ab, die die Typen in den Metadaten beschreiben.

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)
ImportAllBindings()

Gibt einen Satz von Binding-Objekten zurück, die aus den Metadatendokumenten importiert wurden.

ImportAllContracts()

Gibt einen Satz von ContractDescription-Objekten zurück, die die Anschlusstypinformationen in den Metadatendokumenten darstellen.

ImportAllEndpoints()

Gibt eine ServiceEndpointCollection zurück, die die Endpunkte in WSDL-Dokumenten darstellt.

ImportBinding(Binding)

Gibt ein Binding-Objekt zurück, das die Bindungsinformationen aus einem Satz von Metadatendokumenten darstellt.

ImportContract(PortType)

Gibt ein ContractDescription-Objekt zurück, das die durch die angegebenen Anschlusstypinformationen ermittelten Metadaten darstellt.

ImportEndpoint(Port)

Gibt einen ServiceEndpoint aus einem Satz von Metadatendokumenten zurück, der Informationen aus dem angegebenen Port-Objekt verwendet.

ImportEndpoints(Binding)

Gibt eine ServiceEndpointCollection zurück, die alle WSDL-Anschlusstypen mit der angegebenen Binding darstellt.

ImportEndpoints(PortType)

Gibt eine ServiceEndpointCollection zurück, die alle WSDL-Anschlusstypen darstellt, die dem angegebenen PortType zugeordnet sind.

ImportEndpoints(Service)

Gibt eine ServiceEndpointCollection zurück, die alle WSDL-Anschlusstypen im angegebenen Service darstellt.

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)

Gilt für