Sdílet prostřednictvím


IPolicyImportExtension.ImportPolicy Metoda

Definice

Definuje metodu, která může importovat vlastní kontrolní výrazy zásad a přidat implementující prvky vazby.

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)

Parametry

importer
MetadataImporter

Objekt MetadataImporter , který se používá.

context
PolicyConversionContext

Obsahuje PolicyConversionContext jak kontrolní výrazy zásad, které lze importovat, tak kolekce prvků vazby, do kterých lze přidat implementující prvky vazby.

Příklady

Následující příklad kódu ukazuje použití PolicyAssertionCollection.Remove metody k vyhledání, vrácení a odebrání kontrolního výrazu v jednom kroku.

  #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

Následující příklad kódu ukazuje konfigurační soubor klientské aplikace pro načtení vlastního importu zásad při System.ServiceModel.Description.MetadataResolver vyvolání.

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

Následující příklad kódu ukazuje použití objektu MetadataResolver ke stažení a překladu metadat do objektů popisu.

// 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"))

Poznámky

Implementujte metodu ImportPolicy pro získání kontrolních výrazů zásad a proveďte určitou změnu importovaného kontraktu nebo vazby pro podporu kontrolního výrazu. Importér zásad obvykle reaguje na vyhledání vlastního kontrolního výrazu zásad konfigurací nebo vložením elementu vazby do importované vazby.

Windows Communication Foundation (WCF) předá metodě dva objekty ImportPolicy , MetadataImporter a a PolicyConversionContext. Objekt již obvykle obsahuje kontrolní výrazy zásad pro každý obor vazby PolicyConversionContext .

Implementace IPolicyImportExtension provede následující kroky:

  1. Vyhledá kontrolní výraz vlastní zásady, za který odpovídá, voláním GetBindingAssertionsmetod , GetMessageBindingAssertionsnebo GetOperationBindingAssertions v závislosti na oboru.

  2. Odebere kontrolní výraz zásad z kolekce kontrolních výrazů. Metoda PolicyAssertionCollection.Remove vyhledá, vrátí a odebere kontrolní výraz v jednom kroku.

  3. Upraví zásobník vazby nebo kontrakt přidáním požadovaného vlastního BindingElement objektu BindingElements do vlastnosti nebo úpravou PolicyConversionContext.Contract vlastnosti.

Krok 2 je důležitý. Po volání všech importérů zásad WCF zkontroluje existenci všech kontrolních výrazů zásad, které zůstávají. Pokud existuje, WCF předpokládá, že import zásad nebyl úspěšný a neimportuje přidruženou vazbu.

Platí pro