IPolicyExportExtension Interface

Definição

Implementar IPolicyExportExtension a inserção de asserções de políticas vinculativas personalizadas na informação da Web Services Description Language (WSDL).

public interface class IPolicyExportExtension
public interface IPolicyExportExtension
type IPolicyExportExtension = interface
Public Interface IPolicyExportExtension
Derivado

Exemplos

O seguinte exemplo de código mostra a implementação de IPolicyExportExtension em um BindingElement. Neste exemplo, um elemento de ligação personalizado é associado ao ficheiro WSDL ao nível de ligação.

#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

O exemplo de código seguinte mostra uma System.ServiceModel.Configuration.BindingElementExtensionElement implementação que permite que o exportador de políticas anterior seja carregado a partir de um ficheiro de configuração de aplicação.

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

O exemplo seguinte mostra o ficheiro de configuração do host que carrega o exportador de políticas personalizadas.

<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>

O exemplo seguinte mostra a asserção personalizada no ficheiro 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="" />

Observações

Implemente a IPolicyExportExtension interface num System.ServiceModel.Channels.BindingElement objeto para escrever declarações sobre capacidades ou requisitos do endpoint na informação WSDL exposta por um endpoint específico. Normalmente, o elemento de ligação é aquele que implementa alguma funcionalidade, mas isso não é obrigatório. Para carregar o seu exportador de políticas a partir de um ficheiro de configuração, implemente um System.ServiceModel.Configuration.BindingElementExtensionElement que devolve o objeto exportador BindingElement de políticas.

O exportador de políticas é utilizado pela Windows Communication Foundation (WCF) para usar asserções de políticas e comunicar aos clientes a existência desse requisito personalizado de ligação ou capacidade de endpoint.

O ExportPolicy método recebe os MetadataExporter objetos e PolicyConversionContext . Use os GetBindingAssertionsmétodos , GetMessageBindingAssertions, e GetOperationBindingAssertions para obter coleções de afirmações de política que já foram exportadas em vários âmbitos. Depois, adicione o seu objeto personalizado de asserção de política à coleção apropriada.

A Contract propriedade expõe o ContractDescription para o endpoint que está a ser exportado. Isto permite que a IPolicyExportExtension extensão defina corretamente o âmbito das suas declarações de política exportadas. Por exemplo, atributos de segurança no código podem adicionar comportamentos que ContractDescription indicam onde as asserções de política de segurança devem ser adicionadas.

O IPolicyExportExtension mecanismo apenas suporta a exportação de afirmações políticas em WSDL. Para exportar elementos WSDL personalizados deve usar o IWsdlExportExtension mecanismo para modificar diretamente o WSDL.

Uma vez que as asserções de políticas personalizadas tenham sido associadas à informação WSDL, os clientes podem detetar e importar as asserções de ligação personalizadas usando um IPolicyImportExtension objeto.

Métodos

Name Description
ExportPolicy(MetadataExporter, PolicyConversionContext)

Implemente para incluir para exportar uma afirmação de política personalizada sobre ligações.

Aplica-se a