IPolicyExportExtension Интерфейс

Определение

Реализуйте IPolicyExportExtension для вставки настраиваемых утверждений политики привязки в сведениях о языке описания служб (SDL).

public interface class IPolicyExportExtension
public interface IPolicyExportExtension
type IPolicyExportExtension = interface
Public Interface IPolicyExportExtension
Производный

Примеры

В следующем примере кода показана реализация метода IPolicyExportExtension в BindingElement. В этом примере элемент настраиваемой привязки присоединяется к файлу WSDL на уровне привязки.

#region IPolicyExporter Members
public void ExportPolicy(MetadataExporter exporter, PolicyConversionContext policyContext)
{
  if (exporter == null)
    throw new NullReferenceException("The MetadataExporter object passed to the ExporterBindingElement is null.");
  if (policyContext == null)
    throw new NullReferenceException("The PolicyConversionContext object passed to the ExporterBindingElement is null.");

  XmlElement elem = doc.CreateElement(name1, ns1);
  elem.InnerText = "My custom text.";
  XmlAttribute att = doc.CreateAttribute("MyCustomAttribute", ns1);
  att.Value = "ExampleValue";
  elem.Attributes.Append(att);
  XmlElement subElement = doc.CreateElement("MyCustomSubElement", ns1);
  subElement.InnerText = "Custom Subelement Text.";
  elem.AppendChild(subElement);
  policyContext.GetBindingAssertions().Add(elem);
  Console.WriteLine("The custom policy exporter was called.");
}
#endregion
#Region "IPolicyExporter Members"
Public Sub ExportPolicy(ByVal exporter As MetadataExporter, ByVal policyContext As PolicyConversionContext) Implements IPolicyExportExtension.ExportPolicy
  If exporter Is Nothing Then
    Throw New NullReferenceException("The MetadataExporter object passed to the ExporterBindingElement is null.")
  End If
  If policyContext Is Nothing Then
    Throw New NullReferenceException("The PolicyConversionContext object passed to the ExporterBindingElement is null.")
  End If

  Dim elem As XmlElement = doc.CreateElement(name1, ns1)
  elem.InnerText = "My custom text."
  Dim att As XmlAttribute = doc.CreateAttribute("MyCustomAttribute", ns1)
  att.Value = "ExampleValue"
  elem.Attributes.Append(att)
  Dim subElement As XmlElement = doc.CreateElement("MyCustomSubElement", ns1)
  subElement.InnerText = "Custom Subelement Text."
  elem.AppendChild(subElement)
  policyContext.GetBindingAssertions().Add(elem)
  Console.WriteLine("The custom policy exporter was called.")
End Sub
#End Region

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

public class ExporterBindingElementConfigurationSection : BindingElementExtensionElement
{
  public ExporterBindingElementConfigurationSection()
  { Console.WriteLine("Exporter configuration section created."); }

  public override Type BindingElementType
  { get { return typeof(ExporterBindingElement); } }

  protected override BindingElement CreateBindingElement()
  { return new ExporterBindingElement(); }
}
Public Class ExporterBindingElementConfigurationSection
    Inherits BindingElementExtensionElement
  Public Sub New()
      Console.WriteLine("Exporter configuration section created.")
  End Sub

  Public Overrides ReadOnly Property BindingElementType() As Type
      Get
          Return GetType(ExporterBindingElement)
      End Get
  End Property

  Protected Overrides Function CreateBindingElement() As BindingElement
      Return New ExporterBindingElement()
  End Function
End Class

В следующем примере показан основной файл конфигурации, загружающий средство экспорта настраиваемой политики.

<system.serviceModel>
  <services>
    <service 
      name="Microsoft.WCF.Documentation.StatefulService"
      behaviorConfiguration="addMetadata"
    >
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8080/StatefulService"/>
        </baseAddresses>
      </host>
      <endpoint 
        address="http://localhost:8080/StatefulService" 
        binding="customBinding" 
        bindingConfiguration="exporter" 
        contract="Microsoft.WCF.Documentation.IStatefulService" 
      />
      <endpoint
        address="mex"
        binding="mexHttpBinding"
        contract="IMetadataExchange"
      />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="addMetadata">
        <serviceMetadata
           httpGetEnabled="true"
           httpGetUrl=""
         />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <customBinding>
      <!-- 
        Use the name attribute of the binding element as 
        the value of the bindingConfiguration attribute in 
        your endpoint.
      -->
      <binding name ="exporter">
        <!-- Use the name attribute of your binding element extension specified below. -->
        <!-- Be certain the order of your custom binding elements is correct. -->
        <exporterBinding />
        <reliableSession/>
        <textMessageEncoding messageVersion="Default" />
        <httpTransport/>
      </binding>
    </customBinding>
  </bindings>
  <extensions>
    <bindingElementExtensions>
      <!-- Use the add element to associate your bindingelement configuration handler and give it a name to use. -->
      <add 
        type="Microsoft.WCF.Documentation.ExporterBindingElementConfigurationSection,PolicyExtensions" 
        name="exporterBinding" />
    </bindingElementExtensions>
  </extensions>
</system.serviceModel>

В следующем примере показано настраиваемое утверждение в файле WSDL.

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"

  namespaces removed here for clarity...

>
  <wsp:Policy wsu:Id="CustomBinding_IStatefulService_policy">
    <wsp:ExactlyOne>
      <wsp:All>
        <acme 
          b:MyCustomAttribute="ExampleValue"
          xmlns="http://Microsoft/WCF/Documentation/CustomPolicyAssertions"           xmlns:b="http://Microsoft/WCF/Documentation/CustomPolicyAssertions">
           My custom text.
          <MyCustomSubElement>Custom Subelement Text.</MyCustomSubElement>
        </acme>
        <wsrm:RMAssertion xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
          <wsrm:InactivityTimeout Milliseconds="600000" />
          <wsrm:AcknowledgementInterval Milliseconds="200" />
        </wsrm:RMAssertion>
        <wsaw:UsingAddressing />
      </wsp:All>
    </wsp:ExactlyOne>
  </wsp:Policy>
  <wsdl:import namespace="http://microsoft.wcf.documentation" location="" />

Комментарии

Реализуйте интерфейс IPolicyExportExtension в объекте System.ServiceModel.Channels.BindingElement, чтобы записать выписки о возможностях и требованиях конечной точки в сведения языка WSDL, предоставленные определенной конечной точкой. Обычно элементом привязки является элемент, реализующий определенное свойство, однако это не является обязательным. Для загрузки средства экспорта политики из файла конфигурации, реализуйте интерфейс System.ServiceModel.Configuration.BindingElementExtensionElement, возвращающий объект BindingElement средства импорта политики.

Средство экспорта политик используется Windows Communication Foundation (WCF) для использования утверждений политики для информирования клиентов о существовании этого настраиваемого требования привязки или возможности конечной точки.

Метод ExportPolicy принимает объекты MetadataExporter и PolicyConversionContext. Используйте методы GetBindingAssertions, GetMessageBindingAssertions и GetOperationBindingAssertions, чтобы получить коллекции утверждений политики, экспортированные в различные области. Затем добавьте объект утверждения настраиваемой политики в соответствующую коллекцию.

Свойство Contract предоставляет объект ContractDescription для экспортируемой конечной точки. Этот позволяет расширению IPolicyExportExtension правильно определить область экспортированных утверждений политики. Например, атрибуты безопасности в коде могут добавлять поведения в объект ContractDescription, указывающие, куда должны быть добавлены утверждения политики безопасности.

Механизм IPolicyExportExtension поддерживает только экспорт утверждений политики в языке WSDL. Для экспорта настраиваемых элементов языка WSDL необходимо использовать механизм IWsdlExportExtension, чтобы изменить язык WSDL напрямую.

После присоединения утверждений настраиваемой политики к информации WSDL клиенты могут обнаруживать и импортировать утверждения настраиваемой привязки путем использования объекта IPolicyImportExtension.

Методы

ExportPolicy(MetadataExporter, PolicyConversionContext)

Реализация необходима для включения для экспорта утверждения настраиваемой политики о привязках.

Применяется к