IPolicyImportExtension Rozhraní

Definice

Definuje metodu pro objekty, které importují vlastní kontrolní výrazy zásad o vazbách.

public interface class IPolicyImportExtension
public interface IPolicyImportExtension
type IPolicyImportExtension = interface
Public Interface IPolicyImportExtension
Odvozené

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

IPolicyImportExtension Implementujte rozhraní pro vyhledávání informací WSDL vystavených konkrétním koncovým bodem pro kontrolní výrazy vlastních zásad o možnostech nebo požadavcích koncového bodu. Dovozce zásad obvykle hledá konkrétní kontrolní výraz a buď vloží prvek vazby, nakonfiguruje prvek vazby nebo upraví kontrakt tak, aby podporoval požadavky kontrolního výrazu.

Na rozdíl od jeho protějšku IPolicyExportExtensionIPolicyImportExtension nevyžaduje implementaci objektuBindingElement. Můžete ji načíst pomocí oddílu konfigurace klienta uvedeného v části Příklady nebo programově přidáním do konstruktoruSystem.ServiceModel.Description.WsdlImporter.

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

Implementace IPolicyImportExtension provádí následující kroky:

  1. Vyhledá kontrolní výraz vlastní zásady, za který zodpovídá voláním GetBindingAssertionsmetody , nebo , GetMessageBindingAssertionsGetOperationBindingAssertions v závislosti na rozsahu.

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

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

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

Důležité

Dodavatel škodlivých metadat se může pokusit odeslat poškozený XML jako součást metadat při pokusu o zneužití importu zásad. Důrazně doporučujeme, aby dovozce vlastních zásad byl robustní pro všechny formy XML, které je možné předat do něj.

Vlastní MetadataImporter implementace musí implementovat vlastní PolicyConversionContext objekt pro extrahování kontrolních výrazů zásad připojených k vlastnímu formátu metadat.

Pokud chcete exportovat a importovat vlastní prvky WSDL, které nejsou kontrolními výrazy zásad, přečtěte si System.ServiceModel.Description.IWsdlExportExtension a System.ServiceModel.Description.IWsdlImportExtension.

Poznámka

Pomocí nástroje ServiceModel Metadata Utility Tool (Svcutil.exe) můžete použít vlastní importy a exportéry zásad pomocí stejných konfiguračních prvků v konfiguračním souboru a možnosti /svcutilConfig:<configFile> .

Metody

ImportPolicy(MetadataImporter, PolicyConversionContext)

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

Platí pro