IPolicyExportExtension Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Implementieren, IPolicyExportExtension um benutzerdefinierte Bindungsrichtlinien assertionen in die WSDL-Informationen (Web Services Description Language) einzufügen.
public interface class IPolicyExportExtension
public interface IPolicyExportExtension
type IPolicyExportExtension = interface
Public Interface IPolicyExportExtension
- Abgeleitet
Beispiele
Das folgende Codebeispiel zeigt die Implementierung für IPolicyExportExtension ein BindingElement. In diesem Beispiel wird ein benutzerdefiniertes Bindungselement an die WSDL-Datei auf Bindungsebene angefügt.
#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
Das folgende Codebeispiel zeigt eine System.ServiceModel.Configuration.BindingElementExtensionElement Implementierung, mit der der vorherige Richtlinienexporteur 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
Das folgende Beispiel zeigt die Hostkonfigurationsdatei, die den benutzerdefinierten Richtlinienexporteur 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>
Das folgende Beispiel zeigt die benutzerdefinierte Assertion in der WSDL-Datei.
<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 verfügbar gemacht werden. In der Regel ist das Bindungselement ein Element, das einige Features implementiert, dies ist jedoch nicht erforderlich. Um den Richtlinienexporteur aus einer Konfigurationsdatei zu laden, implementieren Sie ein System.ServiceModel.Configuration.BindingElementExtensionElement Objekt, das das Richtlinienexporteurobjekt BindingElement zurückgibt.
Der Richtlinienexportierer wird von Windows Communication Foundation (WCF) verwendet, um Richtlinien assertionen zu verwenden, um Clients das Vorhandensein dieser benutzerdefinierten Bindungsanforderung oder Endpunktfunktion mitzuteilen.
Die ExportPolicy Methode verwendet und MetadataExporterPolicyConversionContext Objekte. Verwenden Sie die GetBindingAssertionsMethoden ,, GetMessageBindingAssertionsum GetOperationBindingAssertions Sammlungen von Richtlinien assertionen abzurufen, die bereits in verschiedenen Bereichen exportiert wurden. Fügen Sie dann das benutzerdefinierte Richtlinien assertionsobjekt der entsprechenden Auflistung hinzu.
Die Contract Eigenschaft macht den ContractDescription Endpunkt verfügbar, der exportiert wird. Auf diese Weise kann die Erweiterung ihre IPolicyExportExtension exportierten Richtlinien assertionen korrekt einschränken. Sicherheitsattribute im Code können z. B. Verhaltensweisen hinzufügen, die ContractDescription angeben, wo Sicherheitsrichtlinien assertionen hinzugefügt werden sollen.
Der IPolicyExportExtension Mechanismus unterstützt nur das Exportieren von Richtlinien assertionen in WSDL. Um benutzerdefinierte WSDL-Elemente zu exportieren, müssen Sie den IWsdlExportExtension Mechanismus verwenden, um die WSDL direkt zu ändern.
Sobald benutzerdefinierte Richtlinien assertionen an die WSDL-Informationen angefügt wurden, können Clients die benutzerdefinierten Bindungs assertionen mithilfe eines IPolicyImportExtension Objekts erkennen und importieren.
Methoden
| Name | Beschreibung |
|---|---|
| ExportPolicy(MetadataExporter, PolicyConversionContext) |
Implementieren, um eine benutzerdefinierte Richtlinien assertion zu Bindungen zu exportieren. |