(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

IPolicyImportExtension-Schnittstelle

Definiert eine Methode für Objekte, die benutzerdefinierte Richtlinienassertionen zu Bindungen importieren.

Namespace:  System.ServiceModel.Description
Assembly:  System.ServiceModel (in System.ServiceModel.dll)

public interface IPolicyImportExtension

Der IPolicyImportExtension-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche MethodeImportPolicyDefiniert eine Methode, mit der benutzerdefinierte Richtlinienassertionen importiert und implementierende Bindungselemente hinzugefügt werden können.
Zum Seitenanfang

Implementieren Sie die IPolicyImportExtension-Schnittstelle, um in WSDL-Informationen, die von einem bestimmten Endpunkt ausgegeben werden, nach benutzerdefinierten Richtlinienassertionen zu Endpunktfunktionen oder -anforderungen zu suchen. In der Regel sucht ein Richtlinienprogramm nach einer bestimmten Assertion und fügt entweder ein Bindungselement ein, konfiguriert ein Bindungselement oder ändert den Vertrag so, dass die Anforderungen der Assertion unterstützt werden.

Im Gegensatz zu seinem Gegenstück IPolicyExportExtension erfordert IPolicyImportExtension keine Implementierung durch ein BindingElement-Objekt; Sie können es mithilfe des Clientkonfigurationsabschnitts im Beispielabschnitt oder aber programmgesteuert laden, indem Sie es dem System.ServiceModel.Description.WsdlImporter-Konstruktor hinzufügen.

Windows Communication Foundation (WCF) übergibt zwei Objekte an die ImportPolicy-Methode, einen MetadataImporter und einen PolicyConversionContext. In der Regel enthält das PolicyConversionContext-Objekt bereits die Richtlinienassertionen für jeden Bindungsbereich.

Eine IPolicyImportExtension-Implementierung führt die folgenden Schritte aus:

  1. Sucht die benutzerdefinierte Richtlinienassertion, für die sie verantwortlich ist, durch Aufruf der Methode GetBindingAssertions, GetMessageBindingAssertions oder GetOperationBindingAssertions (je nach Bereich).

  2. Entfernt die Richtlinienassertion aus der Assertionsauflistung. Die PolicyAssertionCollection.Remove-Methode sucht die Assertion, gibt sie zurück und entfernt sie (in einem Schritt).

  3. Ändern Sie den Bindungsstapel oder den Vertrag, indem Sie entweder ein erforderliches benutzerdefiniertes BindingElement der BindingElements-Eigenschaft hinzufügen oder indem Sie die PolicyConversionContext.Contract-Eigenschaft ändern.

Schritt 2 ist wichtig. Nachdem alle Richtlinienimportprogramme aufgerufen wurden, prüft WCF, ob Richtlinienassertionen verbleiben. Werden verbleibende Richtlinienassertion gefunden, geht WCF davon aus, dass der Richtlinienimport nicht erfolgreich war und importiert die zugeordnete Bindung nicht.

Wichtiger HinweisWichtig

Ein böswilliger Metadatenanbieter kann versuchen, falsch formatiertes XML als Teil der Metadaten zu versenden, um ein Richtlinienimportprogramm auszunutzen. Es wird dringend empfohlen, dass die benutzerdefinierten Richtlinienimportprogramme so konzipiert werden, dass sie stabil gegenüber allen XML-Formen sind, die an sie übergeben werden.

Benutzerdefinierte MetadataImporter-Implementierungen müssen ihr eigenes PolicyConversionContext-Objekt implementieren, um die an das benutzerdefinierte Metadatenformat angehängten Richtlinienassertionen zu extrahieren.

Wenn Sie benutzerdefinierte WSDL-Elemente exportieren und importieren möchten, bei denen es sich nicht um Richtlinienassertionen handelt, finden Sie weitere Informationen unter System.ServiceModel.Description.IWsdlExportExtension und System.ServiceModel.Description.IWsdlImportExtension.

HinweisHinweis

Sie können benutzerdefinierte Richtlinienimporter und -exporter mit dem ServiceModel Metadata Utility-Tool (Svcutil.exe) verwenden, indem Sie dieselben Konfigurationselemente in einer Konfigurationsdatei und der /svcutilConfig:<configFile>-Option verwenden.

Im folgenden Codebeispiel wird die Verwendung der PolicyAssertionCollection.Remove-Methode zum Suchen, Zurückgeben und Entfernen der Assertion in einem Schritt gezeigt.


  #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


Im folgenden Codebeispiel wird die Clientanwendungs-Konfigurationsdatei gezeigt, mit der das benutzerdefinierte Richtlinienimportprogramm geladen wird, wenn System.ServiceModel.Description.MetadataResolver aufgerufen wird.


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



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


Im folgenden Codebeispiel wird die Verwendung von MetadataResolver gezeigt, mit dem Metadaten in Beschreibungsobjekte heruntergeladen und aufgelöst werden.


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


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft