MetadataImporter Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Importuje metadane do ServiceEndpoint obiektów.
public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
- Dziedziczenie
-
MetadataImporter
- Pochodne
Przykłady
W poniższym przykładzie pokazano użycie klasy pochodnej System.ServiceModel.Description.WsdlImporter do importowania metadanych przy użyciu stanu niestandardowego, sprawdzania Errors właściwości, kompilowania zaimportowanych metadanych do typów zarządzanych i zapisywania wyniku w pliku kodu.
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();
}
Uwagi
Użyj implementacji klasy abstrakcyjnej, MetadataImporter aby zaimportować metadane usługi. Typy pochodzące z MetadataImporter klasy implementują obsługę importowania formatów metadanych, które korzystają z logiki importowania WS-Policy w programie Windows Communication Foundation (WCF).
Implementacja MetadataImporter zbiera wyrażenia zasad dołączone do metadanych usługi w System.ServiceModel.Description.PolicyConversionContext obiekcie. Następnie MetadataImporter przetwarza zasady w ramach importowania metadanych przez wywołanie implementacji interfejsu System.ServiceModel.Description.IPolicyImportExtensionMetadataImporter.PolicyImportExtensions we właściwości .
Możesz dodać obsługę importowania nowych asercji zasad do klasy MetadataImporter , dodając własną implementację interfejsu System.ServiceModel.Description.IPolicyImportExtension do MetadataImporter.PolicyImportExtensions właściwości w wystąpieniu MetadataImporter . Alternatywnie możesz zarejestrować rozszerzenie importu zasad w pliku konfiguracji aplikacji.
Typ System.ServiceModel.Description.WsdlImporter jest implementacją klasy abstrakcyjnej dołączonej MetadataImporter do programu WCF. Typ System.ServiceModel.Description.WsdlImporter importuje metadane WSDL z dołączonymi zasadami, które są powiązane w System.ServiceModel.Description.MetadataSet obiekcie.
Obsługę importowania rozszerzeń WSDL można dodać, implementując System.ServiceModel.Description.IWsdlImportExtension interfejs, a następnie dodając implementację do właściwości w wystąpieniu WsdlImporter.WsdlImportExtensionsSystem.ServiceModel.Description.WsdlImporter . Element System.ServiceModel.Description.WsdlImporter może również ładować implementacje interfejsu zarejestrowanego System.ServiceModel.Description.IWsdlImportExtension w pliku konfiguracji aplikacji.
Uwaga
MetadataImporter Ponieważ konstruktor jest wewnętrzny, nie można pochodzić z MetadataImporter tej wersji.
Właściwości
Errors |
Pobiera wartość wskazującą, czy wystąpiły błędy podczas importowania metadanych. |
KnownContracts |
Pobiera słownik kontraktów według nazwy, o których zna importer. |
PolicyImportExtensions |
Pobiera kolekcję importerów zasad, które importer wywołuje do przetwarzania asercji zasad. |
State |
Pobiera lub ustawia kolekcję obiektów używanych podczas importowania metadanych. |
Metody
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
ImportAllContracts() |
Po przesłonięciu w klasie pochodnej zwraca kolekcję kontraktów zaimportowanych z metadanych. |
ImportAllEndpoints() |
Po zastąpieniu w klasie pochodnej zwraca wszystkie punkty końcowe w metadanych. |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |