IPolicyExportExtension Rozhraní
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Implementaci IPolicyExportExtension vložte vlastní kontrolní výrazy zásad vazby do informací jazyka WSDL (Web Services Description Language).
public interface class IPolicyExportExtension
public interface IPolicyExportExtension
type IPolicyExportExtension = interface
Public Interface IPolicyExportExtension
- Odvozené
Příklady
Následující příklad kódu ukazuje implementaci v IPolicyExportExtensionBindingElement. V tomto příkladu je vlastní element vazby připojen k souboru WSDL na úrovni vazby.
#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
Následující příklad kódu ukazuje System.ServiceModel.Configuration.BindingElementExtensionElement implementaci, která umožňuje předchozí exportér zásad být načten z konfiguračního souboru aplikace.
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
Následující příklad ukazuje konfigurační soubor hostitele, který načte nástroj pro export vlastních zásad.
<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>
Následující příklad ukazuje vlastní kontrolní výraz v souboru WSDL.
<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="" />
Poznámky
IPolicyExportExtension Implementujte rozhraní objektu System.ServiceModel.Channels.BindingElement pro zápis příkazů o schopnostech nebo požadavcích koncového bodu do informací WSDL vystavených konkrétním koncovým bodem. Element vazby obvykle implementuje nějakou funkci, ale to není povinné. Pokud chcete načíst export zásad z konfiguračního souboru, implementujte objekt , System.ServiceModel.Configuration.BindingElementExtensionElement který vrátí objekt exportéru BindingElement zásad.
Nástroj pro export zásad používá Technologie WCF (Windows Communication Foundation) k použití kontrolních výrazů zásad ke komunikaci s klienty o existenci tohoto vlastního požadavku vazby nebo funkce koncového bodu.
Metoda ExportPolicy přebírá objekty MetadataExporter a PolicyConversionContext . GetBindingAssertionsPomocí metod , GetMessageBindingAssertionsa GetOperationBindingAssertions získejte kolekce kontrolních výrazů zásad, které už byly exportovány v různých oborech. Potom přidejte vlastní objekt kontrolního výrazu zásad do příslušné kolekce.
Vlastnost Contract zveřejňuje ContractDescription pro koncový bod, který se exportuje. Rozšíření tak IPolicyExportExtension může správně nastavit rozsah exportovaných kontrolních výrazů zásad. Například atributy zabezpečení v kódu mohou přidat chování, ContractDescription které indikuje, kam mají být přidány kontrolní výrazy zásad zabezpečení.
Tento IPolicyExportExtension mechanismus podporuje pouze export kontrolních výrazů zásad ve WSDL. Chcete-li exportovat vlastní elementy WSDL, musíte použít IWsdlExportExtension mechanismus k přímé úpravě WSDL.
Po připojení kontrolních výrazů vlastních zásad k informacím WSDL mohou klienti rozpoznat a importovat vlastní kontrolní výrazy vazby pomocí objektu IPolicyImportExtension .
Metody
ExportPolicy(MetadataExporter, PolicyConversionContext) |
Implementujte pro zahrnutí pro export vlastního kontrolního výrazu zásad o vazbách. |