Condividi tramite


PolicyConversionContext Classe

Definizione

Definisce una classe utilizzata per recuperare asserzioni dell'associazione nei metadati e allegare elementi dell'associazione di implementazione all'ambito appropriato.

public ref class PolicyConversionContext abstract
public abstract class PolicyConversionContext
type PolicyConversionContext = class
Public MustInherit Class PolicyConversionContext
Ereditarietà
PolicyConversionContext

Esempio

Nell'esempio di codice seguente viene illustrata un'implementazione del metodo ImportPolicy che scrive tutte le asserzioni di criteri sulla console. I commenti del codice descrivono come individuare un'asserzione di criteri personalizzata specifica, creare e inserire un elemento dell'associazione di implementazione e rimuovere l'asserzione dalla raccolta.

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

Nell'esempio di codice seguente viene illustrato come registrare le implementazioni IPolicyImportExtension utilizzando la sezione di configurazione <policyImporters>.

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

Nell'esempio di codice seguente viene illustrato come implementare IPolicyExportExtension mediante un elemento dell'associazione personalizzato per allegare un'asserzione di criteri personalizzata alle asserzioni dell'associazione.

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

Commenti

Un'implementazione della classe PolicyConversionContext viene passata agli oggetti IPolicyExportExtension e IPolicyImportExtension per esportare e importare, rispettivamente, asserzioni di criteri personalizzate a e da i metadati. Durante l'esportazione, viene recuperata una raccolta di asserzioni di criteri per aggiungere asserzioni personalizzate. Durante l'importazione, vengono recuperate le asserzioni per importarne di specifiche e configurare gli elementi dell'associazione appropriati.

  • Il metodo GetBindingAssertions restituisce tutte le asserzioni di criteri necessarie all'associazione.

  • Il metodo GetFaultBindingAssertions restituisce tutte le asserzioni di criteri per un messaggio di errore specifico.

  • Il metodo GetMessageBindingAssertions restituisce tutte le asserzioni di criteri per un messaggio specifico.

  • Il metodo GetOperationBindingAssertions restituisce tutte le asserzioni di criteri per un'operazione specifica.

  • La proprietà BindingElements ottiene gli elementi dell'associazione per l'associazione descritta o configurata.

  • La proprietà Contract ottiene la descrizione del contratto per la quale viene descritta o configurata l'associazione.

Costruttori

PolicyConversionContext(ServiceEndpoint)

Inizializza una nuova istanza della classe PolicyConversionContext utilizzando l'endpoint specificato.

Proprietà

BindingElements

Ottiene una raccolta di elementi dell'associazione ai quali vengono aggiunti elementi dell'associazione personalizzati che consentono di implementare asserzioni di criteri.

Contract

Ottiene il contratto per l'endpoint.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetBindingAssertions()

Ottiene una raccolta di asserzioni di criteri dai metadati.

GetFaultBindingAssertions(FaultDescription)

Restituisce una raccolta di asserzioni di criteri per l'errore SOAP specificato.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetMessageBindingAssertions(MessageDescription)

Ottiene una raccolta di asserzioni di criteri per un messaggio.

GetOperationBindingAssertions(OperationDescription)

Restituisce una raccolta di asserzioni di criteri per l'operazione specificata.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a