PolicyConversionContext Classe

Definição

Define uma classe usada para recuperar asserções de ligação em metadados e para anexar elementos de ligação de implementação no âmbito apropriado.

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 seguinte mostra uma implementação do ImportPolicy método que escreve todas as asserções de políticas na consola. Os comentários do código descrevem como localizar uma asserção de política personalizada específica, criar e inserir um elemento de ligação de implementação e remover a asserçã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 seguinte mostra como registar IPolicyImportExtension implementações usando a <policyImporters> secçã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 seguinte demonstra como um elemento de ligação personalizado pode implementar IPolicyExportExtension a anexação de uma asserção de política personalizada às asserções de ligaçã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);
    }
}

Observações

Uma implementação do PolicyConversionContext é passada para IPolicyExportExtension e IPolicyImportExtension objetos para exportar e importar, respetivamente, asserções de políticas personalizadas para e a partir de metadados. Na exportação, uma coleção de asserções de política é recuperada para adicionar asserções personalizadas. Na importação, as asserções são recuperadas para importar as específicas e configurar os elementos de ligação adequadamente.

  • O GetBindingAssertions método devolve todas as afirmações de apólice que são para a vinculação.

  • O GetFaultBindingAssertions método devolve todas as asserções de apólice para uma mensagem de falha específica.

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

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

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

  • A Contract propriedade recebe a descrição do contrato para a qual a vinculação está a ser descrita ou configurada.

Construtores

Name Description
PolicyConversionContext(ServiceEndpoint)

Inicializa uma nova instância da PolicyConversionContext classe usando o endpoint especificado.

Propriedades

Name Description
BindingElements

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

Contract

Recebe o contrato para o endpoint.

Métodos

Name Description
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íticas a partir de metadados.

GetFaultBindingAssertions(FaultDescription)

Devolve uma coleção de asserções de apólice para a falha SOAP especificada.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetMessageBindingAssertions(MessageDescription)

Recebe uma coleção de afirmações de política para uma mensagem.

GetOperationBindingAssertions(OperationDescription)

Devolve 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 atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a