IPolicyImportExtension.ImportPolicy Méthode

Définition

Définit une méthode qui peut importer des assertions de stratégie personnalisées et ajouter des éléments de liaison d’implémentation.

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)

Paramètres

importer
MetadataImporter

Objet MetadataImporter utilisé.

context
PolicyConversionContext

Le PolicyConversionContext qui contient à la fois les assertions de stratégie qui peuvent être importées et les collections d'éléments de liaison au niveau desquelles les éléments de liaison doivent être implémentés peut être ajouté.

Exemples

L'exemple de code suivant montre l'utilisation de la méthode PolicyAssertionCollection.Remove pour rechercher, retourner et supprimer l'assertion en une seule étape.

  #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

L'exemple de code suivant montre le fichier de configuration de l'application cliente pour charger l'importateur de stratégie personnalisé lors de l'appel à 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>

L'exemple de code suivant montre l'utilisation du MetadataResolver pour télécharger et résoudre des métadonnées dans des objets de 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"))

Remarques

Implémentez la méthode ImportPolicy pour obtenir des assertions de stratégie et apporter des modifications au contrat ou à la liaison importés afin de prendre en charge l’assertion. En général, un importateur de stratégie répond à la recherche d’une assertion de stratégie personnalisée en configurant ou insérant un élément de liaison dans la liaison en cours d’importation.

Windows Communication Foundation (WCF) transmet deux objets à la ImportPolicy méthode , un MetadataImporter et un PolicyConversionContext. En général, l’objet PolicyConversionContext contient déjà les assertions de stratégie pour chaque portée de liaison.

Une implémentation IPolicyImportExtension effectue les étapes suivantes :

  1. Recherche l'assertion de stratégie personnalisée de laquelle elle est chargée en appelant les méthodes GetBindingAssertions, GetMessageBindingAssertions ou GetOperationBindingAssertions, en fonction de la portée.

  2. Supprime l’assertion de stratégie de la collection d’assertions. La méthode PolicyAssertionCollection.Remove recherche, retourne et supprime l'assertion en une seule étape.

  3. Modifie la pile de liaison ou le contrat en ajoutant un BindingElement personnalisé requis à la propriété BindingElements ou en modifiant la propriété PolicyConversionContext.Contract.

L'étape 2 est importante. Une fois que tous les importateurs de stratégie ont été appelés, WCF vérifie l’existence de toutes les assertions de stratégie restantes. S’il en existe une, WCF suppose que l’importation de stratégie a échoué et n’importe pas la liaison associée.

S’applique à