Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Интерфейс IPolicyImportExtension

 

Опубликовано: Октябрь 2016

Определяет метод для объектов, которые импортируют утверждения настраиваемой политики о привязках.

Пространство имен:   System.ServiceModel.Description
Сборка:  System.ServiceModel (в System.ServiceModel.dll)

public interface IPolicyImportExtension

ИмяОписание
System_CAPS_pubmethodImportPolicy(MetadataImporter, PolicyConversionContext)

Определяет метод, который может импортировать утверждения пользовательской политики и добавлять реализующие элементы привязки.

Реализуйте интерфейс IPolicyImportExtension для поиска сведений языка WSDL, предоставленных определенной конечной точкой для утверждений пользовательской политики о возможностях и требованиях конечной точки. Обычно средство импорта политики производит поиск конкретного утверждения и вставляет элемент привязки, настраивает элемент привязки или изменяет контракт для поддержки требований утверждения.

В отличие от аналога, IPolicyExportExtension, IPolicyImportExtension не требует реализации объектом BindingElement; его можно загрузить с помощью раздела конфигурации клиента, показанного в разделе «Пример», или программным образом путем добавления к конструктору System.ServiceModel.Description.WsdlImporter.

Windows Communication Foundation (WCF) передает два объекта методу ImportPolicy: MetadataImporter и PolicyConversionContext. Обычно в объекте PolicyConversionContext уже содержатся утверждения политики для каждой области привязки.

Реализация IPolicyImportExtension выполняет следующие действия:

  1. Располагает утверждение настраиваемой политики, за которое она отвечает, путем вызова методов GetBindingAssertions, GetMessageBindingAssertions или GetOperationBindingAssertions, в зависимости от области.

  2. Удаляет утверждение политики из коллекции утверждений. Метод PolicyAssertionCollection.Remove располагает, возвращает и удаляет утверждение за один шаг.

  3. Измените стек привязок или контракт путем добавления необходимого настраиваемого объекта BindingElement в свойство BindingElements или путем изменения свойства PolicyConversionContext.Contract.

Шаг 2 является важным. После вызова всех средств импорта политики WCF проверяет существование оставшихся утверждений политики. При наличии такового WCF предполагает, что импорт политики прошел не успешно и не импортирует связанную привязку.

System_CAPS_importantВажно

Поставщик вредоносных метаданных может попытаться отправить неправильно сформированное XML как часть метаданных в попытке воспользоваться средством импорта политики. Настоятельно рекомендуется, чтобы средства импорта настраиваемой политики были надежными для всех форм XML, передача которых возможна.

Настраиваемые реализации MetadataImporter должны реализовать свой собственный объект PolicyConversionContext для извлечения утверждений политики, прикрепленных к формату настраиваемых метаданных.

При необходимости в экспорте и импорте настраиваемых элементов WSDL, не являющихся утверждениями политики, см. разделы System.ServiceModel.Description.IWsdlExportExtension и System.ServiceModel.Description.IWsdlImportExtension.

System_CAPS_noteПримечание

Средства импорта и экспорта настраиваемой политики можно использовать с Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe) с помощью использования тех же элементов конфигурации в файле конфигурации и параметра /svcutilConfig:<configFile>.

В следующем примере кода показано применение метода PolicyAssertionCollection.Remove для расположения, возвращения и удаления утверждения за один шаг.

  #region IPolicyImporter Members
  public const string name1 = "acme";
  public const string ns1 = "http://Microsoft/WCF/Documentation/CustomPolicyAssertions";

  /*
   * Importing policy assertions usually means modifying the bindingelement stack in some way
   * to support the policy assertion. The procedure is:
   * 1. Find the custom assertion to import.
   * 2. Insert a supporting custom bindingelement or modify the current binding element collection
   *     to support the assertion.
   * 3. Remove the assertion from the collection. Once the ImportPolicy method has returned, 
   *     any remaining assertions for the binding cause the binding to fail import and not be 
   *     constructed.
   */
  public void ImportPolicy(MetadataImporter importer, PolicyConversionContext context)
  {
    Console.WriteLine("The custom policy importer has been called.");
    // Locate the custom assertion and remove it.
    XmlElement customAssertion = context.GetBindingAssertions().Remove(name1, ns1);
    if (customAssertion != null)
    {
      Console.WriteLine(
        "Removed our custom assertion from the imported "
        + "assertions collection and inserting our custom binding element."
      );
      // Here we would add the binding modification that implemented the policy.
      // This sample does not do this.
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine(customAssertion.NamespaceURI + " : " + customAssertion.Name);
      Console.WriteLine(customAssertion.OuterXml);
      Console.ForegroundColor = ConsoleColor.Gray;
    }
 }
#endregion

В следующем примере кода показан файл конфигурации клиентского приложения для загрузки средства импорта настраиваемой политики при вызове System.ServiceModel.Description.MetadataResolver.

В следующем примере кода показано применение MetadataResolver для загрузки и разрешения метаданных в объекты описания.

// Download all metadata. 
ServiceEndpointCollection endpoints
  = MetadataResolver.Resolve(
    typeof(IStatefulService),
    new EndpointAddress("http://localhost:8080/StatefulService/mex")
  );

.NET Framework
Доступно с 3.0
Вернуться в начало
Показ: