Compartilhar via


PolicyConversionContext Classe

Definição

Define uma classe usada para recuperar asserções de associação nos metadados e para anexar a implementação de elementos de associação no escopo adequado.

public ref class PolicyConversionContext abstract
public abstract class PolicyConversionContext
type PolicyConversionContext = class
Public MustInherit Class PolicyConversionContext
Herança
PolicyConversionContext

Exemplos

O exemplo de código a seguir mostra uma implementação do ImportPolicy método que grava todas as declarações de política no console. Os comentários de código descrevem como localizar uma declaração de política personalizada específica, criar e inserir um elemento de associação em implementação e remover a declaração da coleção.

public void ImportPolicy(MetadataImporter importer,
    PolicyConversionContext context)
{
    Console.WriteLine("The custom policy importer has been called.");
    foreach (XmlElement assertion in context.GetBindingAssertions())
    {
        Console.WriteLine(assertion.NamespaceURI + " : " + assertion.Name);
        // locate a particular assertion by Name and NamespaceURI
        XmlElement customAssertion = context.GetBindingAssertions().Find(name1, ns1);
        if (customAssertion != null)
        {
          // Found assertion; remove from collection.
          context.GetBindingAssertions().Remove(customAssertion);
          Console.WriteLine(
            "Removed our custom assertion from the imported "
            + "assertions collection and inserting our custom binding element."
          );
            // Here if you find the custom policy assertion that you are looking for,
            // add the custom binding element that handles the functionality that the policy indicates.
            // Attach it to the PolicyConversionContext.BindingElements collection.
            // For example, if the custom policy had a "speed" attribute value:
            /*
              string speed
                = customAssertion.GetAttribute(SpeedBindingElement.name2, SpeedBindingElement.ns2);
              SpeedBindingElement e = new SpeedBindingElement(speed);
              context.BindingElements.Add(e);
            */
        }

        // write assertion name in red.
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(assertion.NamespaceURI + " : " + assertion.Name);

        //write contents in gray.
        Console.WriteLine(assertion.OuterXml);
        Console.ForegroundColor = ConsoleColor.Gray;
    }
}

O exemplo de código a seguir mostra como registrar IPolicyImportExtension implementações usando a <policyImporters> seção de configuração.

<configuration>
  <system.serviceModel>
    <client>
      <metadata>
        <policyImporters>
          <extension type="CustomPolicyImporter, assembly"/>
        </policyImporters>
      </metadata>
    </client>
  </system.serviceModel>
</configuration>

O exemplo de código a seguir demonstra como um elemento de associação personalizado pode implementar IPolicyExportExtension para anexar uma declaração de política personalizada às declarações de associação.

public class MyBindingElement : BindingElement, IPolicyExportExtension
{
// BindingElement implementation . . .

    public void ExportPolicy(
     MetadataExporter exporter, PolicyConversionContext context)
    {
        XmlDocument xmlDoc = new XmlDocument();
        XmlElement xmlElement =
               xmlDoc.CreateElement("MyPolicyAssertion");
        context.GetBindingAssertions().Add(xmlElement);
    }

    // Note: All custom binding elements must return a deep clone
    // to enable the run time to support multiple bindings using the
    // same custom binding.
    public override BindingElement Clone()
    {
        // this is just a placeholder
        return null;
    }

    // Call the inner property.
    public override T GetProperty<T>(BindingContext context)
    {
        return context.GetInnerProperty<T>();
    }
}

public class Program {
    public static void Main(string[] args) {
        EndpointAddress address =
            new EndpointAddress("http://localhost/metadata");
        CustomBinding customBinding =
            new CustomBinding(new BasicHttpBinding());
        customBinding.Elements.Add(new MyBindingElement());
        ContractDescription contract =
            ContractDescription.GetContract(typeof(MyContract));
        ServiceEndpoint endpoint =
            new ServiceEndpoint(contract, customBinding, address);
        MetadataExporter exporter = new WsdlExporter();
        exporter.ExportEndpoint(endpoint);
    }
}

Comentários

Uma implementação do PolicyConversionContext é passada para IPolicyExportExtension e IPolicyImportExtension objetos para exportar e importar, respectivamente, declarações de política personalizadas de e para metadados. Na exportação, uma coleção de declarações de política é recuperada para adicionar declarações personalizadas. Na importação, as declarações são recuperadas para importar os específicos e configurar os elementos de associação adequadamente.

  • O GetBindingAssertions método retorna todas as declarações de política que são para a associação.

  • O GetFaultBindingAssertions método retorna todas as declarações de política para uma mensagem de falha específica.

  • O GetMessageBindingAssertions método retorna todas as declarações de política para uma mensagem específica.

  • O GetOperationBindingAssertions método retorna todas as declarações de política para uma operação específica.

  • A BindingElements propriedade obtém os elementos de associação para a associação que está sendo descrita ou configurada.

  • A Contract propriedade obtém a descrição do contrato para a qual a associação está sendo descrita ou configurada.

Construtores

PolicyConversionContext(ServiceEndpoint)

Inicializa uma nova instância da classe PolicyConversionContext usando o ponto de extremidade especificado.

Propriedades

BindingElements

Obtém uma coleção de elementos de associação aos quais elementos de associação personalizados que implementam asserções de política são adicionados.

Contract

Obtém o contrato para o ponto de extremidade.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetBindingAssertions()

Obtém uma coleção de asserções de política de metadados.

GetFaultBindingAssertions(FaultDescription)

Retorna uma coleção de asserções de política para a falha SOAP especificada.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetMessageBindingAssertions(MessageDescription)

Obtém uma coleção de asserções de política para uma mensagem.

GetOperationBindingAssertions(OperationDescription)

Retorna uma coleção de asserções de política para a operação especificada.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a