Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Interface IPolicyImportExtension

Define um método para objetos que importar declarações de diretiva personalizado sobre ligações.

Namespace:  System.ServiceModel.Description
Assembly:  System.ServiceModel (em System.ServiceModel.dll)

public interface IPolicyImportExtension

O tipo IPolicyImportExtension expõe os membros a seguir.

  NomeDescrição
Método públicoImportPolicyDefine um método que pode importar declarações de diretiva personalizada e adicionar elementos de ligação de implementação.
Superior

Implementar a IPolicyImportExtension interface para pesquisar informações sobre o WSDL exposto por um determinado ponto de extremidade para declarações de diretiva personalizado sobre recursos de ponto de extremidade ou requisitos. Normalmente, um importador de diretiva procura uma afirmação específica e o insere um elemento de ligação, configura um elemento de ligação ou modifica o contrato para oferecer suporte os requisitos da asserção.

Ao contrário de sua contraparte, IPolicyExportExtension, IPolicyImportExtension não exige a implementação por um BindingElement de objeto; Você pode carregá-lo usando a seção de configuração do cliente mostrada na seção exemplos ou através de programação, adicionando-o para o System.ServiceModel.Description.WsdlImporter construtor.

Windows Communication Foundation (WCF)passa dois objetos para o ImportPolicy método, um MetadataImporter e um PolicyConversionContext. Normalmente o PolicyConversionContext objeto já contém as declarações de diretiva para cada escopo de ligação.

Um IPolicyImportExtension implementação executa as seguintes etapas:

  1. Localiza a declaração de diretiva personalizada para o qual ele é responsável, chamando um a GetBindingAssertions, GetMessageBindingAssertions, ou GetOperationBindingAssertions métodos, dependendo do escopo.

  2. Remove a declaração de diretiva da coleção afirmação. O PolicyAssertionCollection.Remove método localiza, retorna e remove a declaração em uma única etapa.

  3. Modificar a pilha de ligação ou o contrato, adicionando um personalizado obrigatório BindingElement para o BindingElements propriedade ou modificando o PolicyConversionContext.Contract propriedade.

Etapa 2 é importante. Depois que todos os importadores de diretiva tiverem sido chamados, WCF verifica a existência de quaisquer declarações de política que permanecem. Se houver um, WCF supõe que a importação de diretiva não teve êxito e não importa a ligação associada.

Observação importanteImportante

Um fornecedor de metadados mal-intencionado pode tentar enviar XML malformado como parte dos metadados em uma tentativa de explorar um importador de diretiva. É altamente recomendável dessa diretiva personalizada importadores ser robusto para todas as formas de XML que pode ser passado para ele.

Personalizado MetadataImporter implementações devem implementar seus próprios PolicyConversionContext objeto para extrair declarações de política anexado no formato de metadados personalizados.

Se você deseja exportar e importar elementos WSDL personalizados que não são declarações de política, consulte System.ServiceModel.Description.IWsdlExportExtension e System.ServiceModel.Description.IWsdlImportExtension.

ObservaçãoObservação

Você pode usar importadores de diretiva personalizada e exporters com o Ferramenta Utilitário de Metadados ServiceModel (Svcutil.exe) usando os mesmos elementos de configuração em um arquivo de configuração e o /svcutilConfig:<configFile> opção.

O exemplo de código a seguir mostra o uso da PolicyAssertionCollection.Remove método para localizar, volte e remova a declaração em uma única etapa.


  #region IPolicyImporter Members
  public const string name1 = "acme";
  public const string ns1 = "http://Microsoft/WCF/Documentation/CustomPolicyAssertions";

  /*
   * Importing policy assertions usually means modifying the bindingelement stack in some way
   * to support the policy assertion. The procedure is:
   * 1. Find the custom assertion to import.
   * 2. Insert a supporting custom bindingelement or modify the current binding element collection
   *     to support the assertion.
   * 3. Remove the assertion from the collection. Once the ImportPolicy method has returned, 
   *     any remaining assertions for the binding cause the binding to fail import and not be 
   *     constructed.
   */
  public void ImportPolicy(MetadataImporter importer, PolicyConversionContext context)
  {
    Console.WriteLine("The custom policy importer has been called.");
    // Locate the custom assertion and remove it.
    XmlElement customAssertion = context.GetBindingAssertions().Remove(name1, ns1);
    if (customAssertion != null)
    {
      Console.WriteLine(
        "Removed our custom assertion from the imported "
        + "assertions collection and inserting our custom binding element."
      );
      // Here we would add the binding modification that implemented the policy.
      // This sample does not do this.
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine(customAssertion.NamespaceURI + " : " + customAssertion.Name);
      Console.WriteLine(customAssertion.OuterXml);
      Console.ForegroundColor = ConsoleColor.Gray;
    }
 }
#endregion


O exemplo de código a seguir mostra o cliente o arquivo de configuração do aplicativo ao carregar o importador de diretiva personalizada quando o System.ServiceModel.Description.MetadataResolver é invocado.


<client>
    <endpoint 
      address="http://localhost:8080/StatefulService" 
      binding="wsHttpBinding"
      bindingConfiguration="CustomBinding_IStatefulService" 
      contract="IStatefulService"
      name="CustomBinding_IStatefulService" />
  <metadata>
    <policyImporters>
      <extension type="Microsoft.WCF.Documentation.CustomPolicyImporter, PolicyExtensions"/>
    </policyImporters>
  </metadata>
</client>



<client>
    <endpoint 
      address="http://localhost:8080/StatefulService" 
      binding="wsHttpBinding"
      bindingConfiguration="CustomBinding_IStatefulService" 
      contract="IStatefulService"
      name="CustomBinding_IStatefulService" />
  <metadata>
    <policyImporters>
      <extension type="Microsoft.WCF.Documentation.CustomPolicyImporter, PolicyExtensions"/>
    </policyImporters>
  </metadata>
</client>


O exemplo de código a seguir mostra o uso da MetadataResolver para baixar e resolver os metadados em objetos de descrição.


// Download all metadata. 
ServiceEndpointCollection endpoints
  = MetadataResolver.Resolve(
    typeof(IStatefulService),
    new EndpointAddress("http://localhost:8080/StatefulService/mex")
  );


.NET Framework

Com suporte em: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

Contribuições da comunidade

ADICIONAR
A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2014 Microsoft