Share via


PolicyConversionContext Klasse

Definition

Definiert eine Klasse, mit der Bindungsassertionen in Metadaten abgerufen und implementierende Bindungselemente im entsprechenden Bereich angefügt werden.

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

Beispiele

Im folgenden Codebeispiel wird eine Implementierung der ImportPolicy-Methode veranschaulicht, die alle Richtlinienassertionen in die Konsole schreibt. Die Codekommentare beschreiben, wie eine bestimmte benutzerdefinierte Richtlinienassertion gesucht wird, wie ein implementierendes Bindungselement erstellt und eingefügt wird und wie die Assertion aus der Auflistung entfernt wird.

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

Das folgende Codebeispiel zeigt, wie IPolicyImportExtension-Implementierungen mit dem <policyImporters>-Konfigurationsabschnitt registriert werden.

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

Das folgende Codebeispiel zeigt, wie ein benutzerdefiniertes Bindungselement IPolicyExportExtension implementieren kann, um eine benutzerdefinierte Richtlinienassertion an die Bindungsassertionen anzufügen.

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

Hinweise

Eine Implementierung von PolicyConversionContext wird an IPolicyExportExtension-Objekte und IPolicyImportExtension-Objekte übergeben, um benutzerdefinierte Richtlinienassertionen in und aus Metadaten zu exportieren bzw. importieren. Beim Export wird eine Auflistung von Richtlinienassertionen abgerufen, um benutzerdefinierte Assertionen hinzuzufügen. Beim Import werden die Assertionen abgerufen, sodass bestimmte Assertionen importiert und Bindungselemente entsprechend konfiguriert werden können.

  • Die GetBindingAssertions-Methode gibt alle Richtlinienassertionen für die Bindung zurück.

  • Die GetFaultBindingAssertions-Methode gibt alle Richtlinienassertionen für eine bestimmte Fehlermeldung zurück.

  • Die GetMessageBindingAssertions-Methode gibt alle Richtlinienassertionen für eine bestimmte Nachricht zurück.

  • Die GetOperationBindingAssertions-Methode gibt alle Richtlinienassertionen für einen bestimmten Vorgang zurück.

  • Die BindingElements-Eigenschaft ruft die Bindungselemente für die zu beschreibende oder zu konfigurierende Bindung zurück.

  • Die Contract-Eigenschaft ruft die Vertragsbeschreibung ab, für die die Bindung beschrieben oder konfiguriert wird.

Konstruktoren

PolicyConversionContext(ServiceEndpoint)

Initialisiert eine neue Instanz der PolicyConversionContext-Klasse unter Verwendung der angegebenen Endpunkts.

Eigenschaften

BindingElements

Ruft eine Auflistung von Bindungselementen ab, denen benutzerdefinierte Bindungselemente hinzugefügt werden, die Richtlinienassertionen implementieren.

Contract

Ruft den Vertrag für den Endpunkt ab.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetBindingAssertions()

Ruft eine Auflistung der Richtlinienassertionen von Metadaten ab.

GetFaultBindingAssertions(FaultDescription)

Gibt eine Auflistung von Richtlinienassertionen für den angegebenen SOAP-Fehler zurück.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetMessageBindingAssertions(MessageDescription)

Ruft eine Auflistung von Richtlinienassertionen für eine Nachricht ab.

GetOperationBindingAssertions(OperationDescription)

Gibt eine Auflistung von Richtlinienassertionen für den angegebenen SOAP-Vorgang zurück.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für