Condividi tramite


IPolicyImportExtension Interfaccia

Definizione

Definisce un metodo per gli oggetti che importano asserzioni di criteri personalizzate sulle associazioni.

public interface class IPolicyImportExtension
public interface IPolicyImportExtension
type IPolicyImportExtension = interface
Public Interface IPolicyImportExtension
Derivato

Esempio

Nell'esempio di codice seguente viene illustrato l'uso del PolicyAssertionCollection.Remove metodo per individuare, restituire e rimuovere l'asserzione in un unico passaggio.

  #region IPolicyImporter Members
  public const string name1 = "acme";
  public const string ns1 = "http://Microsoft/WCF/Documentation/CustomPolicyAssertions";

  /*
   * Importing policy assertions usually means modifying the bindingelement stack in some way
   * to support the policy assertion. The procedure is:
   * 1. Find the custom assertion to import.
   * 2. Insert a supporting custom bindingelement or modify the current binding element collection
   *     to support the assertion.
   * 3. Remove the assertion from the collection. Once the ImportPolicy method has returned,
   *     any remaining assertions for the binding cause the binding to fail import and not be
   *     constructed.
   */
  public void ImportPolicy(MetadataImporter importer, PolicyConversionContext context)
  {
    Console.WriteLine("The custom policy importer has been called.");
    // Locate the custom assertion and remove it.
    XmlElement customAssertion = context.GetBindingAssertions().Remove(name1, ns1);
    if (customAssertion != null)
    {
      Console.WriteLine(
        "Removed our custom assertion from the imported "
        + "assertions collection and inserting our custom binding element."
      );
      // Here we would add the binding modification that implemented the policy.
      // This sample does not do this.
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine(customAssertion.NamespaceURI + " : " + customAssertion.Name);
      Console.WriteLine(customAssertion.OuterXml);
      Console.ForegroundColor = ConsoleColor.Gray;
    }
 }
#endregion
    #Region "IPolicyImporter Members"
    Public Const name1 As String = "acme"
    Public Const ns1 As String = "http://Microsoft/WCF/Documentation/CustomPolicyAssertions"

'    
'     * Importing policy assertions usually means modifying the bindingelement stack in some way
'     * to support the policy assertion. The procedure is:
'     * 1. Find the custom assertion to import.
'     * 2. Insert a supporting custom bindingelement or modify the current binding element collection
'     *     to support the assertion.
'     * 3. Remove the assertion from the collection. Once the ImportPolicy method has returned, 
'     *     any remaining assertions for the binding cause the binding to fail import and not be 
'     *     constructed.
'     
    Public Sub ImportPolicy(ByVal importer As MetadataImporter, ByVal context As PolicyConversionContext) Implements IPolicyImportExtension.ImportPolicy
      Console.WriteLine("The custom policy importer has been called.")
      ' Locate the custom assertion and remove it.
      Dim customAssertion As XmlElement = context.GetBindingAssertions().Remove(name1, ns1)
      If customAssertion IsNot Nothing Then
        Console.WriteLine("Removed our custom assertion from the imported " & "assertions collection and inserting our custom binding element.")
        ' Here we would add the binding modification that implemented the policy.
        ' This sample does not do this.
        Console.ForegroundColor = ConsoleColor.Red
        Console.WriteLine(customAssertion.NamespaceURI & " : " & customAssertion.Name)
        Console.WriteLine(customAssertion.OuterXml)
        Console.ForegroundColor = ConsoleColor.Gray
      End If
    End Sub
  #End Region

Nell'esempio di codice seguente viene illustrato il file di configurazione dell'applicazione client per caricare l'utilità di importazione dei criteri personalizzata quando viene richiamato .System.ServiceModel.Description.MetadataResolver

<client>
    <endpoint 
      address="http://localhost:8080/StatefulService" 
      binding="wsHttpBinding"
      bindingConfiguration="CustomBinding_IStatefulService" 
      contract="IStatefulService"
      name="CustomBinding_IStatefulService" />
  <metadata>
    <policyImporters>
      <extension type="Microsoft.WCF.Documentation.CustomPolicyImporter, PolicyExtensions"/>
    </policyImporters>
  </metadata>
</client>

Nell'esempio di codice seguente viene illustrato l'uso di MetadataResolver per scaricare e risolvere i metadati in oggetti description.

// Download all metadata.
ServiceEndpointCollection endpoints
  = MetadataResolver.Resolve(
    typeof(IStatefulService),
    new EndpointAddress("http://localhost:8080/StatefulService/mex")
  );
' Download all metadata. 
Dim endpoints As ServiceEndpointCollection = MetadataResolver.Resolve(GetType(IStatefulService), New EndpointAddress("http://localhost:8080/StatefulService/mex"))

Commenti

Implementare l'interfaccia IPolicyImportExtension per cercare le informazioni WSDL esposte da un determinato endpoint per le asserzioni di criteri personalizzate relative alle funzionalità o ai requisiti degli endpoint. In genere, un utilità di importazione di criteri cerca un'asserzione specifica e inserisce un elemento di associazione, configura un elemento di associazione o modifica il contratto per supportare i requisiti dell'asserzione.

A differenza della controparte, IPolicyExportExtension, IPolicyImportExtension non richiede l'implementazione da parte di un BindingElement oggetto. È possibile caricarla usando la sezione di configurazione client illustrata nella sezione Esempi o a livello di codice aggiungendola al System.ServiceModel.Description.WsdlImporter costruttore.

Windows Communication Foundation (WCF) passa due oggetti al ImportPolicy metodo , a MetadataImporter e a PolicyConversionContext. In genere l'oggetto PolicyConversionContext contiene già le asserzioni di criteri per ogni ambito di associazione.

Un'implementazione IPolicyImportExtension esegue i passaggi seguenti:

  1. Individua l'asserzione di criteri personalizzata per cui è responsabile chiamando i GetBindingAssertionsmetodi , GetMessageBindingAssertionso GetOperationBindingAssertions , a seconda dell'ambito.

  2. Rimuove l'asserzione di criteri dalla raccolta di asserzioni. Il PolicyAssertionCollection.Remove metodo individua, restituisce e rimuove l'asserzione in un unico passaggio.

  3. Modificare lo stack di binding o il contratto aggiungendo un personalizzato BindingElement necessario alla BindingElements proprietà o modificando la PolicyConversionContext.Contract proprietà .

Il passaggio 2 è importante. Dopo aver chiamato tutti gli utilità di importazione dei criteri, WCF verifica l'esistenza di eventuali asserzioni di criteri che rimangono. Se ne esiste uno, WCF presuppone che l'importazione dei criteri non sia riuscita e non importa l'associazione associata.

Importante

Un fornitore di metadati malintenzionati può tentare di inviare codice XML non valido come parte dei metadati nel tentativo di sfruttare un utilità di importazione di criteri. È consigliabile che gli utilità di importazione di criteri personalizzati siano affidabili per tutte le forme di XML che possono essere passate.

Le implementazioni personalizzate MetadataImporter devono implementare il proprio PolicyConversionContext oggetto per estrarre le asserzioni di criteri associate al formato di metadati personalizzato.

Per esportare e importare elementi WSDL personalizzati che non sono asserzioni di criteri, vedere System.ServiceModel.Description.IWsdlExportExtension e System.ServiceModel.Description.IWsdlImportExtension.

Annotazioni

È possibile usare utilità di importazione ed esportazione di criteri personalizzati con lo strumento utilità metadati ServiceModel (Svcutil.exe) usando gli stessi elementi di configurazione in un file di configurazione e l'opzione /svcutilConfig:<configFile> .

Metodi

Nome Descrizione
ImportPolicy(MetadataImporter, PolicyConversionContext)

Definisce un metodo che può importare asserzioni di criteri personalizzate e aggiungere elementi di associazione di implementazione.

Si applica a