WsdlImporter Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
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.
Creazione di un oggetto WsdlImporter e passaggio di un oggetto MetadataSet al costruttore.
Chiamata al metodo
Import
appropriato per recuperare i risultati.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) |