MetadataImporter Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Импорт метаданных в ServiceEndpoint объекты.
public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
- Наследование
-
MetadataImporter
- Производный
Примеры
В следующем примере показано использование производного System.ServiceModel.Description.WsdlImporter класса для импорта метаданных с помощью пользовательского состояния, проверки Errors свойства, компиляции импортированных метаданных в управляемые типы и сохранения результата в файле кода.
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();
}
Комментарии
Используйте реализацию абстрактного MetadataImporter класса для импорта метаданных службы. Типы, производные от MetadataImporter класса, реализуют поддержку импорта форматов метаданных, которые используют логику импорта WS-Policy в Windows Communication Foundation (WCF).
Реализация MetadataImporter собирает выражения политики, присоединенные к метаданным службы в объекте System.ServiceModel.Description.PolicyConversionContext . Затем MetadataImporter обрабатывает политики как часть импорта метаданных, вызывая реализации интерфейса System.ServiceModel.Description.IPolicyImportExtension в свойстве MetadataImporter.PolicyImportExtensions.
Вы можете добавить поддержку импорта утверждений новой политики в a MetadataImporter , добавив собственную реализацию System.ServiceModel.Description.IPolicyImportExtension интерфейса в MetadataImporter.PolicyImportExtensions свойство в MetadataImporter экземпляре. Кроме того, вы можете зарегистрировать расширение импорта политики в файле конфигурации приложения.
Тип System.ServiceModel.Description.WsdlImporter — это реализация абстрактного класса, включенного MetadataImporter в WCF. Тип System.ServiceModel.Description.WsdlImporter импортирует метаданные WSDL с присоединенными политиками, которые упаковываются в System.ServiceModel.Description.MetadataSet объект.
Вы можете добавить поддержку импорта расширений WSDL, реализовав интерфейс System.ServiceModel.Description.IWsdlImportExtension, а затем добавив реализацию в свойство WsdlImporter.WsdlImportExtensions вашего экземпляра System.ServiceModel.Description.WsdlImporter. Также System.ServiceModel.Description.WsdlImporter может загружать реализации интерфейса System.ServiceModel.Description.IWsdlImportExtension, зарегистрированные в файле конфигурации приложения.
Замечание
MetadataImporter Так как конструктор является внутренним, вы не можете наследоваться в MetadataImporter этой версии.
Свойства
| Имя | Описание |
|---|---|
| Errors |
Возвращает значение, указывающее, были ли ошибки при импорте метаданных. |
| KnownContracts |
Получает словарь контрактов по имени, о том, о чем знает импортер. |
| PolicyImportExtensions |
Возвращает коллекцию импортеров политик, которые импортер вызывает для обработки утверждений политики. |
| State |
Возвращает или задает коллекцию объектов, используемых при импорте метаданных. |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| ImportAllContracts() |
При переопределении в производном классе возвращает коллекцию контрактов, импортированных из метаданных. |
| ImportAllEndpoints() |
При переопределении в производном классе возвращает все конечные точки в метаданных. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |