Partager via


Procédure : configurer une liaison WS-Metadata Exchange personnalisée

Cet article explique comment configurer une liaison d’échange WS-Metadata personnalisée. Windows Communication Foundation (WCF) inclut quatre liaisons de métadonnées définies par le système, mais vous pouvez publier des métadonnées à l’aide de la liaison de votre choix. Cet article explique comment publier des métadonnées à l’aide de wsHttpBinding. Cette liaison vous donne la possibilité d’exposer des métadonnées de manière sécurisée. Le code de cet article est basé sur l’exemple Prise en main.

Utilisation d'un fichier de configuration

  1. Dans le fichier de configuration du service, ajoutez un comportement de service qui contient la balise serviceMetadata :

    <behaviors>  
       <serviceBehaviors>  
         <behavior name="CalculatorServiceBehavior">  
           <serviceMetadata httpGetEnabled="True"/>  
         </behavior>  
       </serviceBehaviors>  
    </behaviors>  
    
  2. Ajoutez un attribut behaviorConfiguration à la balise de service qui référence ce nouveau comportement :

    <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
    behaviorConfiguration="CalculatorServiceBehavior" />
    
  3. Ajoutez un point de terminaison de métadonnées qui spécifie mex comme adresse, wsHttpBinding comme liaison et IMetadataExchange comme contrat :

    <endpoint address="mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange" />  
    
  4. Pour vérifier que le point de terminaison d’échange de métadonnées fonctionne correctement, ajoutez une étiquette de point de terminaison dans le fichier de configuration du client :

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  5. Dans la méthode Main() du client, créez une instance MetadataExchangeClient, affectez à sa propriété ResolveMetadataReferences la valeur true, appelez GetMetadata, puis effectuez une itération au sein de la collection de métadonnées retournée :

    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());  
    

Configuration par code

  1. Créez une instance de liaison WSHttpBinding :

    WSHttpBinding binding = new WSHttpBinding();  
    
  2. Créez une instance ServiceHost :

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);  
    
  3. Ajoutez un point de terminaison de service et ajoutez une instance ServiceMetadataBehavior :

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress);  
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();  
    smb.HttpGetEnabled = true;  
    serviceHost.Description.Behaviors.Add(smb);  
    
  4. Ajoutez un point de terminaison d'échange de métadonnées, en spécifiant le WSHttpBinding créé précédemment :

    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);  
    
  5. Pour vérifier que le point de terminaison d’échange de métadonnées fonctionne correctement, ajoutez une étiquette de point de terminaison dans le fichier de configuration de client :

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  6. Dans la méthode Main() du client, créez une instance MetadataExchangeClient, affectez à la propriété ResolveMetadataReferences la valeur true, appelez GetMetadata, puis effectuez une itération au sein de la collection de métadonnées retournée :

    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());  
    

Voir aussi