Partilhar via


Como: Configurar uma vinculação personalizada do WS-Metadata Exchange

Este artigo explica como configurar uma associação de troca WS-Metadata personalizada. O Windows Communication Foundation (WCF) inclui quatro associações de metadados definidas pelo sistema, mas você pode publicar metadados usando qualquer associação desejada. Este artigo mostra como publicar metadados usando o wsHttpBinding. Esta ligação dá-lhe a opção de expor metadados de forma segura. O código neste artigo é baseado na introdução.

Usando um arquivo de configuração

  1. No arquivo de configuração do serviço, adicione um comportamento de serviço que contenha a serviceMetadata tag :

    <behaviors>  
       <serviceBehaviors>  
         <behavior name="CalculatorServiceBehavior">  
           <serviceMetadata httpGetEnabled="True"/>  
         </behavior>  
       </serviceBehaviors>  
    </behaviors>  
    
  2. Adicione um behaviorConfiguration atributo à etiqueta de serviço que faça referência a esse novo comportamento:

    <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
    behaviorConfiguration="CalculatorServiceBehavior" />
    
  3. Adicione um ponto de extremidade de metadados especificando mex como o endereço, wsHttpBinding como a vinculação e IMetadataExchange como o contrato:

    <endpoint address="mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange" />  
    
  4. Para verificar se o ponto de extremidade de troca de metadados está funcionando corretamente, adicione uma marca de ponto de extremidade no arquivo de configuração do cliente:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  5. No método Main() do cliente, crie uma nova MetadataExchangeClient instância, defina sua ResolveMetadataReferences propriedade como true, chame GetMetadata e itere através da coleção de metadados retornados:

    string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex";  
    
    MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint");  
    mexClient.ResolveMetadataReferences = true;  
    MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress));  
    foreach (MetadataSection section in mdSet.MetadataSections)  
    Console.WriteLine("Metadata section: " + section.Dialect.ToString());  
    

Configuração por código

  1. Crie uma instância de WSHttpBinding vinculação:

    WSHttpBinding binding = new WSHttpBinding();  
    
  2. Crie uma ServiceHost instância:

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);  
    
  3. Adicione um ponto de extremidade de serviço e adicione uma ServiceMetadataBehavior instância:

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress);  
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();  
    smb.HttpGetEnabled = true;  
    serviceHost.Description.Behaviors.Add(smb);  
    
  4. Adicione um ponto de extremidade de troca de metadados, especificando o WSHttpBinding criado anteriormente:

    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);  
    
  5. Para verificar se o ponto de extremidade de troca de metadados está funcionando corretamente, adicione uma marca de ponto de extremidade no arquivo de configuração do cliente:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  6. No método Main() do cliente, crie uma nova MetadataExchangeClient instância, defina a ResolveMetadataReferences propriedade como true, chame GetMetadata e itere através da coleção de metadados retornados:

    string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex";  
    
    MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint");  
    mexClient.ResolveMetadataReferences = true;  
    MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress));  
    foreach (MetadataSection section in mdSet.MetadataSections)  
    Console.WriteLine("Metadata section: " + section.Dialect.ToString());  
    

Consulte também