Partager via


PolicyConversionContext Classe

Définition

Définit une classe permettant de récupérer des assertions de liaison dans des métadonnées et d'attacher des éléments de liaison d'implémentation au niveau de la portée appropriée.

public ref class PolicyConversionContext abstract
public abstract class PolicyConversionContext
type PolicyConversionContext = class
Public MustInherit Class PolicyConversionContext
Héritage
PolicyConversionContext

Exemples

L'exemple de code suivant montre une implémentation de la méthode ImportPolicy qui écrit toutes les assertions de stratégie sur la console. Les commentaires de code décrivent comment rechercher une assertion de stratégie personnalisée spécifique, créer et insérer un élément de liaison d'implémentation et supprimer l'assertion de la collection.

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

L'exemple de code suivant montre comment inscrire des implémentations IPolicyImportExtension à l'aide de la section de configuration <policyImporters>.

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

L'exemple de code suivant montre comment un élément de liaison personnalisé peut implémenter IPolicyExportExtension pour attacher une assertion de stratégie personnalisée aux assertions de liaison.

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

Remarques

Une implémentation du PolicyConversionContext est passée aux objets IPolicyExportExtension et IPolicyImportExtension pour respectivement exporter et importer des assertions de stratégie personnalisées à partir et vers des métadonnées. Lors de l'exportation, une collection d'assertions de stratégie est récupérée pour ajouter des assertions personnalisées. Lors de l’importation, les assertions sont récupérées pour en importer des spécifiques et pour correctement configurer les éléments de liaison.

  • La méthode GetBindingAssertions retourne toutes les assertions de stratégie associées à la liaison.

  • La méthode GetFaultBindingAssertions retourne toutes les assertions de stratégie pour un message d'erreur spécifique.

  • La méthode GetMessageBindingAssertions retourne toutes les assertions de stratégie pour un message spécifique.

  • La méthode GetOperationBindingAssertions retourne toutes les assertions de stratégie pour une opération spécifique.

  • La propriété BindingElements obtient les éléments de liaison pour la liaison en cours de description ou de configuration.

  • La propriété Contract obtient la description de contrat pour laquelle la liaison est en cours de description ou de configuration.

Constructeurs

PolicyConversionContext(ServiceEndpoint)

Initialise une nouvelle instance de la classe PolicyConversionContext à l'aide du point de terminaison spécifié.

Propriétés

BindingElements

Obtient une collection d’éléments de liaison à laquelle sont ajoutés des éléments de liaison personnalisés qui implémentent des assertions de stratégie.

Contract

Obtient le contrat du point de terminaison.

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetBindingAssertions()

Obtient une collection d'assertions de stratégie à partir des métadonnées.

GetFaultBindingAssertions(FaultDescription)

Retourne une collection d’assertions de stratégie pour l’erreur SOAP spécifiée.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetMessageBindingAssertions(MessageDescription)

Obtient une collection d’assertions de stratégie pour un message.

GetOperationBindingAssertions(OperationDescription)

Retourne une collection d’assertions de stratégie pour l’opération spécifiée.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à