IPolicyExportExtension Schnittstelle

Definition

Implementieren Sie IPolicyExportExtension, um benutzerdefinierte Bindungsrichtlinienassertionen in die Web Services Description Language (WSDL)-Informationen einzufügen.

public interface class IPolicyExportExtension
public interface IPolicyExportExtension
type IPolicyExportExtension = interface
Public Interface IPolicyExportExtension
Abgeleitet

Beispiele

Im folgenden Codebeispiel wird die Implementierung der IPolicyExportExtension für ein BindingElement gezeigt. In diesem Beispiel wird ein benutzerdefiniertes Bindungselement an die WSDL-Datei auf Bindungsebene angehängt.

#region IPolicyExporter Members
public void ExportPolicy(MetadataExporter exporter, PolicyConversionContext policyContext)
{
  if (exporter == null)
    throw new NullReferenceException("The MetadataExporter object passed to the ExporterBindingElement is null.");
  if (policyContext == null)
    throw new NullReferenceException("The PolicyConversionContext object passed to the ExporterBindingElement is null.");

  XmlElement elem = doc.CreateElement(name1, ns1);
  elem.InnerText = "My custom text.";
  XmlAttribute att = doc.CreateAttribute("MyCustomAttribute", ns1);
  att.Value = "ExampleValue";
  elem.Attributes.Append(att);
  XmlElement subElement = doc.CreateElement("MyCustomSubElement", ns1);
  subElement.InnerText = "Custom Subelement Text.";
  elem.AppendChild(subElement);
  policyContext.GetBindingAssertions().Add(elem);
  Console.WriteLine("The custom policy exporter was called.");
}
#endregion
#Region "IPolicyExporter Members"
Public Sub ExportPolicy(ByVal exporter As MetadataExporter, ByVal policyContext As PolicyConversionContext) Implements IPolicyExportExtension.ExportPolicy
  If exporter Is Nothing Then
    Throw New NullReferenceException("The MetadataExporter object passed to the ExporterBindingElement is null.")
  End If
  If policyContext Is Nothing Then
    Throw New NullReferenceException("The PolicyConversionContext object passed to the ExporterBindingElement is null.")
  End If

  Dim elem As XmlElement = doc.CreateElement(name1, ns1)
  elem.InnerText = "My custom text."
  Dim att As XmlAttribute = doc.CreateAttribute("MyCustomAttribute", ns1)
  att.Value = "ExampleValue"
  elem.Attributes.Append(att)
  Dim subElement As XmlElement = doc.CreateElement("MyCustomSubElement", ns1)
  subElement.InnerText = "Custom Subelement Text."
  elem.AppendChild(subElement)
  policyContext.GetBindingAssertions().Add(elem)
  Console.WriteLine("The custom policy exporter was called.")
End Sub
#End Region

Im folgenden Codebeispiel wird eine System.ServiceModel.Configuration.BindingElementExtensionElement-Implementierung gezeigt, mit der das vorangehende Richtlinienexportprogramm aus einer Anwendungskonfigurationsdatei geladen werden kann.

public class ExporterBindingElementConfigurationSection : BindingElementExtensionElement
{
  public ExporterBindingElementConfigurationSection()
  { Console.WriteLine("Exporter configuration section created."); }

  public override Type BindingElementType
  { get { return typeof(ExporterBindingElement); } }

  protected override BindingElement CreateBindingElement()
  { return new ExporterBindingElement(); }
}
Public Class ExporterBindingElementConfigurationSection
    Inherits BindingElementExtensionElement
  Public Sub New()
      Console.WriteLine("Exporter configuration section created.")
  End Sub

  Public Overrides ReadOnly Property BindingElementType() As Type
      Get
          Return GetType(ExporterBindingElement)
      End Get
  End Property

  Protected Overrides Function CreateBindingElement() As BindingElement
      Return New ExporterBindingElement()
  End Function
End Class

Im folgenden Beispiel wird die Hostkonfigurationsdatei gezeigt, die das benutzerdefinierte Richtlinienexportprogramm lädt.

<system.serviceModel>
  <services>
    <service 
      name="Microsoft.WCF.Documentation.StatefulService"
      behaviorConfiguration="addMetadata"
    >
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8080/StatefulService"/>
        </baseAddresses>
      </host>
      <endpoint 
        address="http://localhost:8080/StatefulService" 
        binding="customBinding" 
        bindingConfiguration="exporter" 
        contract="Microsoft.WCF.Documentation.IStatefulService" 
      />
      <endpoint
        address="mex"
        binding="mexHttpBinding"
        contract="IMetadataExchange"
      />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="addMetadata">
        <serviceMetadata
           httpGetEnabled="true"
           httpGetUrl=""
         />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <customBinding>
      <!-- 
        Use the name attribute of the binding element as 
        the value of the bindingConfiguration attribute in 
        your endpoint.
      -->
      <binding name ="exporter">
        <!-- Use the name attribute of your binding element extension specified below. -->
        <!-- Be certain the order of your custom binding elements is correct. -->
        <exporterBinding />
        <reliableSession/>
        <textMessageEncoding messageVersion="Default" />
        <httpTransport/>
      </binding>
    </customBinding>
  </bindings>
  <extensions>
    <bindingElementExtensions>
      <!-- Use the add element to associate your bindingelement configuration handler and give it a name to use. -->
      <add 
        type="Microsoft.WCF.Documentation.ExporterBindingElementConfigurationSection,PolicyExtensions" 
        name="exporterBinding" />
    </bindingElementExtensions>
  </extensions>
</system.serviceModel>

Im folgenden Beispiel wird die benutzerdefinierte Assertion in der WSDL-Datei gezeigt.

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"

  namespaces removed here for clarity...

>
  <wsp:Policy wsu:Id="CustomBinding_IStatefulService_policy">
    <wsp:ExactlyOne>
      <wsp:All>
        <acme 
          b:MyCustomAttribute="ExampleValue"
          xmlns="http://Microsoft/WCF/Documentation/CustomPolicyAssertions"           xmlns:b="http://Microsoft/WCF/Documentation/CustomPolicyAssertions">
           My custom text.
          <MyCustomSubElement>Custom Subelement Text.</MyCustomSubElement>
        </acme>
        <wsrm:RMAssertion xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
          <wsrm:InactivityTimeout Milliseconds="600000" />
          <wsrm:AcknowledgementInterval Milliseconds="200" />
        </wsrm:RMAssertion>
        <wsaw:UsingAddressing />
      </wsp:All>
    </wsp:ExactlyOne>
  </wsp:Policy>
  <wsdl:import namespace="http://microsoft.wcf.documentation" location="" />

Hinweise

Implementieren Sie die IPolicyExportExtension-Schnittstelle für ein System.ServiceModel.Channels.BindingElement-Objekt, um Anweisungen zu Endpunktfunktionen oder -anforderungen in die WSDL-Informationen zu schreiben, die von einem bestimmten Endpunkt ausgegeben werden. In der Regel ist das Bindungselement ein Element, das einige Funktionen implementiert, aber dies ist nicht erforderlich. Um das Richtlinienexportprogramm aus einer Konfigurationsdatei zu laden, implementieren Sie ein System.ServiceModel.Configuration.BindingElementExtensionElement, das das Richtlinienexportprogramm-BindingElement-Objekt zurückgibt.

Der Richtlinienexportierer wird von Windows Communication Foundation (WCF) verwendet, um Richtlinienassertionen zu verwenden, um Clients das Vorhandensein dieser benutzerdefinierten Bindungsanforderung oder Endpunktfunktion zu kommunizieren.

Die ExportPolicy-Methode ruft das MetadataExporter-Objekt und das PolicyConversionContext-Objekt auf. Verwenden Sie die Methoden GetBindingAssertions, GetMessageBindingAssertions und GetOperationBindingAssertions, um Auflistungen von Richtlinienassertionen aufzurufen, die bereits für verschiedene Bereiche exportiert wurden. Fügen Sie dann das benutzerdefinierte Richtlinienassertionsobjekt der entsprechenden Auflistung hinzu.

Die Contract-Eigenschaft gibt die ContractDescription für den Endpunkt aus, der exportiert wird. Dies ermöglicht es der IPolicyExportExtension-Erweiterung, den richtigen Bereich für die exportierten Richtlinienassertionen festzulegen. Sicherheitsattribute im Code können beispielsweise der ContractDescription Verhalten hinzufügen, die angeben, wo Richtlinienassertionen hinzugefügt werden sollen.

Der IPolicyExportExtension-Mechanismus unterstützt nur exportierende Richtlinienassertionen in WSDL. Um benutzerdefinierte WSDL-Elemente zu exportieren, müssen Sie den IWsdlExportExtension-Mechanismus zum direkten Ändern der WSDL verwenden.

Nachdem benutzerdefinierte Richtlinienassertionen an die WSDL-Informationen angehängt wurden, können Clients die benutzerdefinierten Bindungsassertionen mithilfe eines IPolicyImportExtension-Objekts erkennen und importieren.

Methoden

ExportPolicy(MetadataExporter, PolicyConversionContext)

Implementieren Sie dies, um beim Export eine benutzerdefinierte Richtlinienassertion zu Bindungen einzuschließen.

Gilt für: