Comment : configurer une liaison WS-Metadata Exchange personnalisée
Cette rubrique 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. Cette rubrique indique comment publier des métadonnées à l'aide du wsHttpBinding. Cette liaison vous donne la possibilité d'exposer des métadonnées de manière sécurisée. Le code dans cet article est basé sur Getting Started Sample.
Utilisation d'un fichier de configuration
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>
Ajoutez un attribut behaviorConfiguration à la balise de service qui référence ce nouveau comportement :
<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
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" />
Pour vérifier que le point de terminaison d'échange de métadonnées fonctionne correctement, ajoutez une balise de point de terminaison dans le fichier de configuration de client :
<endpoint name="MyMexEndpoint" address="https://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
Dans la méthode Main() du client, créez une instance MetadataExchangeClient, affectez à sa propriété ResolveMetadataReferences la valeur true, appelez GetMetadata, puis parcourez la collection de métadonnées retournée :
string mexAddress = "https://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
Créez une instance de liaison WsHttpBinding :
WSHttpBinding binding = new WSHttpBinding();
Créez une instance ServiceHost :
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
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);
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);
Pour vérifier que le point de terminaison d'échange de métadonnées fonctionne correctement, ajoutez une balise de point de terminaison dans le fichier de configuration de client :
<endpoint name="MyMexEndpoint" address="https://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
Dans la méthode Main() du client, créez une instance MetadataExchangeClient, affectez à la propriété ResolveMetadataReferences la valeur true, appelez GetMetadata, puis parcourez la collection de métadonnées retournée :
string mexAddress = "https://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
Concepts
Métadonnées
Publication de métadonnées
Publication de points de terminaison de métadonnées