MetadataImporter 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 i metadati in oggetti ServiceEndpoint.
public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
- Ereditarietà
-
MetadataImporter
- Derivato
Esempio
Nell'esempio seguente viene illustrato l'utilizzo della classe derivata System.ServiceModel.Description.WsdlImporter per importare metadati utilizzando uno stato personalizzato, controllando la proprietà Errors, compilando metadati importati in tipi gestiti e salvando il risultato in un file di codice.
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
Utilizza un'implementazione della classe astratta MetadataImporter per importare i metadati del servizio. I tipi che derivano dalla classe implementano il MetadataImporter supporto per l'importazione di formati di metadati che sfruttano la logica di importazione WS-Policy in Windows Communication Foundation (WCF).
Un'implementazione di MetadataImporter raccoglie le espressioni di criteri collegate ai metadati del servizio in un oggetto System.ServiceModel.Description.PolicyConversionContext. MetadataImporter elabora quindi i criteri come parte dell'importazione dei metadati chiamando le implementazioni dell'interfaccia System.ServiceModel.Description.IPolicyImportExtension nella proprietà MetadataImporter.PolicyImportExtensions.
È possibile aggiungere il supporto per importare nuove asserzioni di criteri in un oggetto MetadataImporter aggiungendo la propria implementazione dell'interfaccia System.ServiceModel.Description.IPolicyImportExtension alla proprietà MetadataImporter.PolicyImportExtensions in un'istanza MetadataImporter. In alternativa, è possibile registrare l'estensione di importazione dei criteri nel file di configurazione dell'applicazione.
Il System.ServiceModel.Description.WsdlImporter tipo è l'implementazione della MetadataImporter classe astratta inclusa in WCF. Il tipo System.ServiceModel.Description.WsdlImporter importa metadati WSDL insieme ai relativi criteri allegati. Questi elementi vengono quindi raggruppati in un oggetto System.ServiceModel.Description.MetadataSet.
Per aggiungere il supporto per l'importazione di estensioni WSDL, implementare l'interfaccia System.ServiceModel.Description.IWsdlImportExtension, quindi aggiungere tale implementazione alla proprietà WsdlImporter.WsdlImportExtensions nell'istanza di System.ServiceModel.Description.WsdlImporter. È inoltre possibile utilizzare il tipo System.ServiceModel.Description.WsdlImporter per caricare implementazioni dell'interfaccia System.ServiceModel.Description.IWsdlImportExtension registrate nel file di configurazione dell'applicazione.
Nota
Poiché il costruttore MetadataImporter è interno, non è possibile derivare da MetadataImporter in questa versione.
Proprietà
Errors |
Ottiene un valore che indica se si sono verificati errori durante l'importazione dei metadati. |
KnownContracts |
Ottiene un dizionario di contratti in base al nome noto all'utilità di importazione. |
PolicyImportExtensions |
Ottiene una raccolta di utilità di importazione dei criteri chiamate dall'utilità di importazione per elaborare le asserzioni dei criteri. |
State |
Ottiene o imposta una raccolta di oggetti utilizzata nell'importazione di 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) |
ImportAllContracts() |
Quando viene sottoposto a override in una classe derivata, restituisce una raccolta di contratti importati dai metadati. |
ImportAllEndpoints() |
Quando viene sottoposto a override in una classe derivata, restituisce tutti gli endpoint nei metadati. |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |