WsdlImporter Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Импортирует метаданные на языке WSDL 1.1 с вложениями 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
- Наследование
Примеры
В следующем примере кода показано, как использовать WsdlImporter для добавления настраиваемых System.Runtime.Serialization.IDataContractSurrogate, импортировать все контракты, а также выполнять компиляцию данных контрактов и их сохранение в файл.
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();
}
Комментарии
Рекомендуется использовать класс WsdlImporter для импорта метаданных, а также для их преобразования в различные классы, представляющие данные контракта и конечной точки.
Базовый класс для WsdlImporter, класс MetadataImporter, определяет методы, с помощью которых можно выборочно импортировать сведения контракта и конечной точки, а также свойства, предоставляющие сведения об ошибках и принимающие сведения о типах, относящиеся к процессу импорта и преобразования. Тип WsdlImporter используется средства импорта настраиваемой политики (реализации IPolicyImportExtension) из родительского типа, чтоб обрабатывать настраиваемые операторы политики и собственные средства импорта WSDL (реализации IWsdlImportExtension) для обработки настраиваемых элементов WSDL. Дополнительные сведения см. в разделе "Расширение системы метаданных".
При импортировании политики из документов WSDL тип WsdlImporter пробует применить до 32 комбинаций альтернативных политик к различным объектам политики WSDL. Если ни одну из этих комбинацией не удается импортировать без ошибок, первая комбинация используется для создания частичной пользовательской привязки.
Помимо данных методов и свойство, в WsdlImporter также реализованы методы, которые поддерживают импорт сведений привязки и свойств, предоставляющих доступ к документам политики, документам WSDL, расширениям WSDL и документам схемы XML. Сведения о расширении WsdlImporter для поддержки настраиваемых элементов WSDL, см. в разделе IWsdlImportExtension.
Обычно класс WsdlImporter используется в трехшаговом процессе.
Создайте объект WsdlImporter и передайте объект в конструктор MetadataSet.
Вызовите соответствующий метод
Import
для извлечения результатов.Проверьте свойство Errors, чтобы определить, не было ли ошибок импорта.
Примечание
При импортировании типов порта WSDL, если QName типа порта совпадает с записью в словаре KnownContracts, импортирование типа порта не выполняется, и вместо него используется известный контракт.
Значения не возвращаются из свойств WsdlImporter до тех пор, пока не будет вызван один из методов импорта. Пользовательские System.ServiceModel.Description.IWsdlImportExtension объекты можно загрузить в WsdlImporter программно или с помощью элемента wsdlImporters> конфигурации< клиента.
Метаданные, импортированные как конечные точки службы, не могут использоваться для создания среды выполнения или экспорта метаданных, поскольку импортируемые конечные точки не содержат сведений об управляемом типе. Чтобы использовать метаданные для создания среды выполнения службы или клиента, либо для создания метаданных, следует сначала создать и выполнить компиляцию кода из метаданных и использовать эти сведения о типе для создания нового объекта System.ServiceModel.Description.ContractDescription с помощью GetContract.
Конструкторы
WsdlImporter(MetadataSet) |
Инициализирует новый экземпляр класса WsdlImporter. |
WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>) |
Создает объект WsdlImporter из заданных метаданных, настраиваемых средств импорта политики и настраиваемых средств импорта WSDL. |
WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>, MetadataImporterQuotas) |
Создает объект WsdlImporter из заданных метаданных, настраиваемых средств импорта политики и настраиваемых средств импорта WSDL. |
Свойства
Errors |
Возвращает значение, указывающее наличие ошибок при импорте метаданных. (Унаследовано от MetadataImporter) |
KnownContracts |
Возвращает словарь контрактов по имени, о котором знает средство импорта. (Унаследовано от MetadataImporter) |
PolicyImportExtensions |
Возвращает коллекцию средств импорта политики, которые средство импорта вызывает для обработки утверждений политики. (Унаследовано от MetadataImporter) |
State |
Возвращает или задает коллекцию объектов, используемых при импорте метаданных. (Унаследовано от MetadataImporter) |
WsdlDocuments |
Получает набор объектов ServiceDescription, которые описывают сведения о контракте в документах метаданных. |
WsdlImportExtensions |
Получает набор объектов IWsdlImportExtension, используемых для импорта сведений о настраиваемом WSDL. |
XmlSchemas |
Получает набор объектов XmlSchema, которые описывают типы в документах метаданных. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
ImportAllBindings() |
Возвращает набор объектов Binding, импортированных из документов метаданных. |
ImportAllContracts() |
Возвращает набор объектов ContractDescription, представляющих сведения о типе порта в документах метаданных. |
ImportAllEndpoints() |
Возвращает ServiceEndpointCollection, который представляет конечные точки в документах WSDL. |
ImportBinding(Binding) |
Возвращает объект Binding, представляющий сведения о привязке из набора документов метаданных. |
ImportContract(PortType) |
Возвращает объект ContractDescription, представляющий метаданные, поиск которых выполняется по сведениям о конкретном типе порта. |
ImportEndpoint(Port) |
Возвращает ServiceEndpoint из набора документов метаданных, которые используют сведения из указанного объекта Port. |
ImportEndpoints(Binding) |
Возвращает ServiceEndpointCollection, представляющий все типы порта WSDL, используя заданный Binding. |
ImportEndpoints(PortType) |
Возвращает ServiceEndpointCollection, представляющий все типы порта WSDL, связанные с заданным PortType. |
ImportEndpoints(Service) |
Возвращает ServiceEndpointCollection, представляющий все типы порта WSDL в заданном Service. |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |