Compartir a través de


PolicyConversionContext Clase

Definición

Define una clase utilizada para recuperar aserciones de enlace en metadatos, y asociar los elementos de enlace de la implementación en el ámbito adecuado.

public ref class PolicyConversionContext abstract
public abstract class PolicyConversionContext
type PolicyConversionContext = class
Public MustInherit Class PolicyConversionContext
Herencia
PolicyConversionContext

Ejemplos

El siguiente ejemplo de código muestra una implementación del método ImportPolicy que escribe todas las aserciones de la directiva en la consola. Los comentarios de código describen cómo localizar una aserción de la directiva personalizada concreta, crear e insertar un elemento de enlace de implementación y quitar la aserción de la colección.

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

El siguiente ejemplo de código muestra cómo registrar implementaciones IPolicyImportExtension mediante la sección de configuración <policyImporters>.

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

El ejemplo de código siguiente muestra cómo un elemento de enlace personalizado puede implementar IPolicyExportExtension, y asociar una aserción de la directiva personalizada a las aserciones de enlace.

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);
    }
}

Comentarios

Una implementación de PolicyConversionContext se pasa a IPolicyExportExtension y los objetos IPolicyImportExtension, para exportar e importar, respectivamente, las aserciones de la directiva personalizadas a los metadatos y desde ellos. En exportación, se recupera una colección de aserciones de la directiva para agregar las aserciones personalizadas. En importación, las aserciones se recuperan para importar aquellas que son específicas y configurar adecuadamente los elementos de enlace.

  • El método GetBindingAssertions devuelve todas las aserciones de la directiva que son para el enlace.

  • El método GetFaultBindingAssertions devuelve todas las aserciones de la directiva para un mensaje de error concreto.

  • El método GetMessageBindingAssertions devuelve todas las aserciones de la directiva para un mensaje concreto.

  • El método GetOperationBindingAssertions devuelve todas las aserciones de la directiva para una operación concreta.

  • La propiedad BindingElements obtiene los elementos de enlace para el enlace que se describe o configura.

  • La propiedad Contract obtiene la descripción del contrato para la que se describe o configura el enlace.

Constructores

PolicyConversionContext(ServiceEndpoint)

Inicializa una nueva instancia de la clase PolicyConversionContext con el extremo especificado.

Propiedades

BindingElements

Obtiene una colección de elementos de enlace a la que se agregan los elementos de enlace personalizados que implementan las aserciones de la directiva.

Contract

Obtiene el contrato para el punto de conexión.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetBindingAssertions()

Obtiene de los metadatos una colección de aserciones de directiva.

GetFaultBindingAssertions(FaultDescription)

Devuelve una colección de aserciones de la directiva para el error de SOAP especificado.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetMessageBindingAssertions(MessageDescription)

Obtiene una colección de aserciones de la directiva para un mensaje.

GetOperationBindingAssertions(OperationDescription)

Devuelve una colección de aserciones de la directiva para la operación especificada.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a