IPolicyExportExtension Interfejs

Definicja

Zaimplementuj IPolicyExportExtension , aby wstawić niestandardowe asercji zasad powiązań w informacjach o języku WSDL (Web Services Description Language).

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

Przykłady

Poniższy przykład kodu przedstawia implementację IPolicyExportExtension obiektu na obiekcie BindingElement. W tym przykładzie niestandardowy element powiązania jest dołączony do pliku WSDL na poziomie powiązania.

#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

Poniższy przykład kodu przedstawia implementację System.ServiceModel.Configuration.BindingElementExtensionElement , która umożliwia załadowanie poprzedniego eksportera zasad z pliku konfiguracji aplikacji.

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

W poniższym przykładzie przedstawiono plik konfiguracji hosta, który ładuje niestandardowego eksportera zasad.

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

W poniższym przykładzie pokazano asercji niestandardowej w pliku 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="" />

Uwagi

Zaimplementuj IPolicyExportExtensionSystem.ServiceModel.Channels.BindingElement interfejs na obiekcie, aby napisać instrukcje dotyczące możliwości punktu końcowego lub wymagań w informacjach WSDL uwidocznionych przez określony punkt końcowy. Zazwyczaj element powiązania jest jednym, który implementuje niektóre funkcje, ale nie jest to wymagane. Aby załadować eksportera zasad z pliku konfiguracji, zaimplementuj System.ServiceModel.Configuration.BindingElementExtensionElement obiekt, który zwraca obiekt eksportera BindingElement zasad.

Eksporter zasad jest używany przez program Windows Communication Foundation (WCF) do używania asercji zasad w celu komunikowania się klientom z istnieniem tego niestandardowego wymagania dotyczącego powiązania lub możliwości punktu końcowego.

Metoda ExportPolicy przyjmuje MetadataExporter obiekty i PolicyConversionContext . GetBindingAssertionsUżyj metod , GetMessageBindingAssertionsi GetOperationBindingAssertions , aby uzyskać kolekcje asercji zasad, które zostały już wyeksportowane w różnych zakresach. Następnie dodaj niestandardowy obiekt asercji zasad do odpowiedniej kolekcji.

Właściwość Contract uwidacznia ContractDescription punkt końcowy, który jest eksportowany. Dzięki temu rozszerzenie może IPolicyExportExtension prawidłowo określać zakres wyeksportowanych asercji zasad. Na przykład atrybuty ContractDescription zabezpieczeń w kodzie mogą dodawać zachowania wskazujące miejsce dodawania asercji zasad zabezpieczeń.

Mechanizm IPolicyExportExtension obsługuje tylko eksportowanie asercji zasad w języku WSDL. Aby wyeksportować niestandardowe elementy WSDL, należy użyć IWsdlExportExtension mechanizmu , aby bezpośrednio zmodyfikować plik WSDL.

Po dołączeniu asercji zasad niestandardowych do informacji WSDL klienci mogą wykrywać i importować niestandardowe potwierdzenia powiązań przy użyciu IPolicyImportExtension obiektu.

Metody

ExportPolicy(MetadataExporter, PolicyConversionContext)

Zaimplementuj funkcję dołączania do eksportowania potwierdzenia zasad niestandardowych dotyczących powiązań.

Dotyczy