Sdílet prostřednictvím


IPolicyExportExtension Rozhraní

Definice

Implementujte IPolicyExportExtension vložení vlastních kontrolních výrazů zásad vazby do informací 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 na IPolicyExportExtension .BindingElement 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 načtení předchozího vývozce zásad 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 vlastní exportér 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

Implementujte rozhraní objektu IPolicyExportExtensionSystem.ServiceModel.Channels.BindingElement pro zápis příkazů o možnostech nebo požadavcích koncového bodu do informací WSDL vystavených konkrétním koncovým bodem. Element vazby je obvykle ten, který implementuje určitou funkci, ale to není povinné. Pokud chcete načíst vývozce zásad z konfiguračního souboru, implementujte System.ServiceModel.Configuration.BindingElementExtensionElement objekt, který vrátí objekt vývozce BindingElement zásad.

Vývozce zásad používá služba Windows Communication Foundation (WCF) k použití kontrolních výrazů zásad ke komunikaci s klienty o existenci tohoto vlastního požadavku vazby nebo schopnosti koncového bodu.

Metoda ExportPolicy přebírá MetadataExporter objekty a PolicyConversionContext objekty. GetBindingAssertionsPomocí , GetMessageBindingAssertionsa GetOperationBindingAssertions metody získat kolekce kontrolních výrazů zásad, které již 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 koncový bod, který se exportuje. Rozšíření tak může IPolicyExportExtension správně vymezit rozsah exportovaných kontrolních výrazů zásad. Například atributy zabezpečení v kódu mohou přidávat ContractDescription chování, které indikuje, kde mají být přidány kontrolní výrazy zásad zabezpečení.

Mechanismus IPolicyExportExtension podporuje pouze export kontrolních výrazů zásad ve WSDL. Chcete-li exportovat vlastní elementy WSDL, je nutné použít IWsdlExportExtension mechanismus k úpravě WSDL přímo.

Po připojení kontrolních výrazů vlastních zásad k informacím WSDL mohou klienti pomocí objektu rozpoznat a importovat vlastní kontrolní výrazy vazby IPolicyImportExtension .

Metody

Name Description
ExportPolicy(MetadataExporter, PolicyConversionContext)

Implementujte zahrnutí pro export vlastního kontrolního výrazu zásad o vazbách.

Platí pro