Condividi tramite


WsdlImporter Classe

Definizione

Importa metadati Web Services Description Language (WSDL) 1.1 con allegati WS-Policy.

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
Ereditarietà
WsdlImporter

Esempio

Nell'esempio di codice seguente viene illustrato come utilizzare l'oggetto WsdlImporter per aggiungere un'interfaccia System.Runtime.Serialization.IDataContractSurrogate personalizzata, importare tutti i contratti, compilarli e salvarli in un file.

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

Commenti

Utilizzare la classe WsdlImporter per importare metadati e per convertire tali informazioni in varie classi che rappresentano informazioni di contratto e di endpoint.

La classe base per WsdlImporter, ovvero MetadataImporter, definisce metodi che importano selettivamente informazioni di contratto e di endpoint e proprietà che espongono eventuali errore di importazione e accettano informazioni sul tipo relative al processo di importazione e di conversione. Il tipo WsdlImporter utilizza le unità di importazione di criteri personalizzate (implementazioni di IPolicyImportExtension) provenienti dal tipo padre per gestire istruzioni di criteri personalizzate e proprie unità di importazione WSDL personalizzate (implementazioni di IWsdlImportExtension) per gestire elementi WSDL personalizzati. Per informazioni dettagliate, vedere Estensione del sistema dei metadati.

Durante l'importazione di criteri da documenti WSDL, il tipo WsdlImporter tenta fino a 32 combinazioni di alternative di criteri collegate ai diversi soggetti di criteri WSDL. Se nessuna combinazione viene importata correttamente, viene utilizzata la prima combinazione per costruire un'associazione personalizzata parziale.

Oltre a questi metodi e a queste proprietà, WsdlImporter implementa inoltre metodi che supportano l'importazione di informazioni di associazione e proprietà che forniscono accesso a qualsiasi documento di criteri, documento WSDL, estensione WSDL e documento di XML Schema. Per informazioni sull'estensione di WsdlImporter per supportare elementi WSDL personalizzati, vedere IWsdlImportExtension.

In genere, la classe WsdlImporter viene utilizzata in un processo composto da tre passaggi.

  1. Creazione di un oggetto WsdlImporter e passaggio di un oggetto MetadataSet al costruttore.

  2. Chiamata al metodo Import appropriato per recuperare i risultati.

  3. Controllo della proprietà Errors per accertare l'eventuale presenza di errori di importazione.

Nota

Durante l'importazione di tipi di porta WSDL, se QName del tipo di porta corrisponde a una voce nel dizionario KnownContracts il tipo di porta non viene importato e viene invece utilizzato il contratto noto.

Non viene restituito alcun valore dalla proprietà WsdlImporter prima della chiamata a uno dei metodi di importazione. Gli oggetti personalizzati System.ServiceModel.Description.IWsdlImportExtension possono essere caricati a livello di codice o usando l'elemento WsdlImporter wsdlImporters> di configurazione< client.

I metadati importati come endpoint del servizio non possono essere utilizzati per creare metadati di runtime o di esportazione perché gli endpoint importati non contengono informazioni sui tipi gestiti. Per utilizzare i metadati per creare un runtime del client o del servizio o per generare metadati, è necessario innanzitutto generare e compilare codice dai metadati e utilizzare tali informazioni sui tipi per creare un nuovo oggetto System.ServiceModel.Description.ContractDescription utilizzando GetContract.

Costruttori

WsdlImporter(MetadataSet)

Inizializza una nuova istanza della classe WsdlImporter.

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

Crea un oggetto WsdlImporter da entità specificate, ovvero metadati, unità di importazione di criteri personalizzate e unità di importazione WSDL personalizzate.

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

Crea un oggetto WsdlImporter da entità specificate, ovvero metadati, unità di importazione di criteri personalizzate e unità di importazione WSDL personalizzate.

Proprietà

Errors

Ottiene un valore che indica se si sono verificati errori durante l'importazione dei metadati.

(Ereditato da MetadataImporter)
KnownContracts

Ottiene un dizionario di contratti in base al nome noto all'utilità di importazione.

(Ereditato da MetadataImporter)
PolicyImportExtensions

Ottiene una raccolta di utilità di importazione dei criteri chiamate dall'utilità di importazione per elaborare le asserzioni dei criteri.

(Ereditato da MetadataImporter)
State

Ottiene o imposta una raccolta di oggetti utilizzata nell'importazione di metadati.

(Ereditato da MetadataImporter)
WsdlDocuments

Ottiene un set di oggetti ServiceDescription che descrivono le informazioni di contratto esistenti nei documenti dei metadati.

WsdlImportExtensions

Ottiene un set di oggetti IWsdlImportExtension utilizzato per importare informazioni WSDL personalizzate.

XmlSchemas

Ottiene un set di oggetti XmlSchema che descrivono tipi esistenti nei metadati.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
ImportAllBindings()

Restituisce un set di oggetti Binding importati dai documenti dei metadati.

ImportAllContracts()

Restituisce un set di oggetti ContractDescription che rappresentano le informazioni sui tipi di porta nei documenti dei metadati.

ImportAllEndpoints()

Restituisce un oggetto ServiceEndpointCollection che rappresenta gli endpoint nei documenti WSDL.

ImportBinding(Binding)

Restituisce un oggetto Binding che rappresenta informazioni di associazione provenienti da un set di documenti dei metadati.

ImportContract(PortType)

Restituisce un oggetto ContractDescription che rappresenta i metadati individuati in base alle informazioni sui tipi di porta specificate.

ImportEndpoint(Port)

Restituisce un oggetto ServiceEndpoint da un set di documenti dei metadati che utilizza le informazioni provenienti dall'oggetto Port specificato.

ImportEndpoints(Binding)

Restituisce un oggetto ServiceEndpointCollection che rappresenta tutti i tipi di porta WSDL che utilizzano l'oggetto Binding specificato.

ImportEndpoints(PortType)

Restituisce un oggetto ServiceEndpointCollection che rappresenta tutti i tipi di porta WSDL associati all'oggetto PortType specificato.

ImportEndpoints(Service)

Restituisce un oggetto ServiceEndpointCollection che rappresenta tutti i tipi di porta WSDL contenuti nell'oggetto Service specificato.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a