Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Interface IPolicyImportExtension

 

Define um método para objetos que importar declarações de política personalizada sobre associações.

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

public interface IPolicyImportExtension

NomeDescrição
System_CAPS_pubmethodImportPolicy(MetadataImporter, PolicyConversionContext)

Define um método que pode importar asserções de políticas personalizadas e adicionar elementos de ligação de implementação.

Implementar o IPolicyImportExtension interface para pesquisar informações de WSDL expostas por um ponto de extremidade específico de declarações de política personalizada sobre recursos de ponto de extremidade ou requisitos. Normalmente, um importador de política procura por uma declaração específica e o insere um elemento de associação, configura um elemento de ligação ou modifica o contrato para oferecer suporte a requisitos de asserção.

Diferentemente de sua contraparte, IPolicyExportExtension, IPolicyImportExtension não exige a implementação por um BindingElement do objeto; você pode carregá-lo usando a seção de configuração de cliente mostrada na seção exemplos ou programaticamente ao ser adicionado a 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 política para cada escopo de associação.

Um IPolicyImportExtension implementação executa as seguintes etapas:

  1. Localiza a declaração de política personalizada para os quais é responsável por chamar o GetBindingAssertions, GetMessageBindingAssertions, ou GetOperationBindingAssertions métodos, dependendo do escopo.

  2. Remove a declaração de política da coleção de asserção. O PolicyAssertionCollection.Remove método localiza e retorna e remove a asserção em uma única etapa.

  3. Modificar a pilha de associação ou o contrato adicionando um personalizado necessário BindingElement para o BindingElements propriedade ou modificando o PolicyConversionContext.Contract propriedade.

Etapa 2 é importante. Depois que todos os importadores política tem sido chamados, WCF verifica a existência de quaisquer declarações de política restantes. Se houver, WCF presume que a importação de política não foi bem-sucedida e não importa a associação associada.

System_CAPS_importantImportante

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

Personalizado MetadataImporter implementações devem implementar seus próprios PolicyConversionContext objeto para extrair declarações de política associado para o 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.

System_CAPS_noteObservação

Você pode usar importadores de diretiva personalizada e Exportadores 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 do 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 do arquivo de configuração de aplicativo para carregar o importador de diretiva personalizada quando o System.ServiceModel.Description.MetadataResolver é invocado.

O exemplo de código a seguir mostra o uso do MetadataResolver para baixar e resolva 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
Disponível desde 3.0
Retornar ao início
Mostrar: