IPolicyExportExtension Arabirim

Tanım

Web Hizmetleri Açıklama Dili (WSDL) bilgilerine özel bağlama ilkesi onayları eklemek için uygulayın IPolicyExportExtension .

public interface class IPolicyExportExtension
public interface IPolicyExportExtension
type IPolicyExportExtension = interface
Public Interface IPolicyExportExtension
Türetilmiş

Örnekler

Aşağıdaki kod örneği, üzerinde BindingElementuygulamasını IPolicyExportExtension gösterir. Bu örnekte, bağlama düzeyinde WSDL dosyasına özel bir bağlama öğesi eklenmiştir.

#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

Aşağıdaki kod örneği, System.ServiceModel.Configuration.BindingElementExtensionElement önceki ilke dışarı aktarıcısının bir uygulama yapılandırma dosyasından yüklenmesini sağlayan bir uygulamayı gösterir.

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

Aşağıdaki örnekte, özel ilke dışarı aktarıcısını yükleyen konak yapılandırma dosyası gösterilmektedir.

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

Aşağıdaki örnekte WSDL dosyasındaki özel onaylama işlemi gösterilmektedir.

<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="" />

Açıklamalar

IPolicyExportExtension Belirli bir uç nokta tarafından kullanıma sunulan WSDL bilgilerine uç nokta özellikleri veya gereksinimleri hakkında deyimler yazmak için bir System.ServiceModel.Channels.BindingElement nesne üzerinde arabirimini uygulayın. Genellikle bağlama öğesi bazı özellikleri uygulayan öğedir, ancak bu gerekli değildir. İlke dışarı aktarıcınızı bir yapılandırma dosyasından yüklemek için, ilkeyi veren BindingElement nesnesini döndüren bir System.ServiceModel.Configuration.BindingElementExtensionElement uygulayın.

İlkeyi veren, Windows Communication Foundation (WCF) tarafından istemcilere bu özel bağlama gereksiniminin veya uç nokta özelliğinin varlığını iletmek üzere ilke onaylarını kullanmak için kullanılır.

ExportPolicy yöntemi ve PolicyConversionContext nesnelerini alırMetadataExporter. GetBindingAssertionsÇeşitli kapsamlarda zaten dışarı aktarılmış ilke onay koleksiyonlarını almak için , GetMessageBindingAssertionsve GetOperationBindingAssertions yöntemlerini kullanın. Ardından özel ilke onaylama nesnenizi uygun koleksiyona ekleyin.

özelliği, Contract dışarı aktarılan uç nokta için öğesini ContractDescription kullanıma sunar. Bu, uzantının IPolicyExportExtension dışarı aktarılan ilke onaylarını doğru şekilde kapsamasını sağlar. Örneğin, koddaki güvenlik öznitelikleri, güvenlik ilkesi onaylarının nereye eklenmesi gerektiğini belirten davranışlar ContractDescription ekleyebilir.

Mekanizma IPolicyExportExtension yalnızca WSDL'de ilke onaylarını dışarı aktarmayı destekler. Özel WSDL öğelerini dışarı aktarmak için, WSDL'yi IWsdlExportExtension doğrudan değiştirmek için mekanizmasını kullanmanız gerekir.

WSDL bilgilerine özel ilke onayları eklendikten sonra istemciler bir IPolicyImportExtension nesne kullanarak özel bağlama onaylarını algılayabilir ve içeri aktarabilir.

Yöntemler

ExportPolicy(MetadataExporter, PolicyConversionContext)

Bağlamalar hakkında özel bir ilke onaylamasını dışarı aktarmak için eklemek için uygulayın.

Şunlara uygulanır