Condividi tramite


IPolicyImportExtension.ImportPolicy Metodo

Definizione

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

public:
 void ImportPolicy(System::ServiceModel::Description::MetadataImporter ^ importer, System::ServiceModel::Description::PolicyConversionContext ^ context);
public void ImportPolicy (System.ServiceModel.Description.MetadataImporter importer, System.ServiceModel.Description.PolicyConversionContext context);
abstract member ImportPolicy : System.ServiceModel.Description.MetadataImporter * System.ServiceModel.Description.PolicyConversionContext -> unit
Public Sub ImportPolicy (importer As MetadataImporter, context As PolicyConversionContext)

Parametri

importer
MetadataImporter

L'oggetto MetadataImporter in uso.

context
PolicyConversionContext

Oggetto PolicyConversionContext che contiene entrambe le asserzioni di criteri che possono essere importate e le raccolte di elementi dell'associazione ai quali è possibile aggiungere gli elementi dell'associazione di implementazione.

Esempio

Nell'esempio di codice seguente viene illustrato come utilizzare il metodo PolicyAssertionCollection.Remove per individuare, restituire e rimuovere l'asserzione in un 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 mostrato il file di configurazione dell'applicazione client per caricare l'utilità di importazione di criteri personalizzata quando viene richiamata la classe 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 come utilizzare MetadataResolver per scaricare e risolvere i metadati in oggetti della descrizione.

// 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 il metodo ImportPolicy per ottenere asserzioni di criteri ed eseguire modifiche del contratto o dell'associazione importati per supportare l'asserzione. In genere, un'utilità di importazione di criteri risponde alla richiesta di trovare un'asserzione di criteri personalizzata configurando o inserendo un elemento dell'associazione nell'associazione in corso di importazione.

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 dell'associazione.

Un'implementazione IPolicyImportExtension consente di eseguire i passaggi seguenti:

  1. Trovare l'asserzione di criteri personalizzata per la quale è responsabile chiamando i metodi GetBindingAssertions, GetMessageBindingAssertions o GetOperationBindingAssertions, a seconda dell'ambito.

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

  3. Modifica lo stack dell'associazione o il contratto aggiungendo un elemento BindingElement personalizzato e obbligatorio alla proprietà BindingElements o modificando la proprietà PolicyConversionContext.Contract.

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

Si applica a