Comment : publier les métadonnées d'un service à l'aide d'un fichier de configuration
C'est l'une des deux rubriques de procédure qui traitent de la publication des métadonnées pour un service Windows Communication Foundation (WCF). Il y a deux façons de spécifier comment un service doit publier des métadonnées : à l'aide d'un fichier de configuration et à l'aide du code. Cette rubrique montre comment publier des métadonnées pour un service à l'aide d'un fichier de configuration.
Attention : |
---|
Cette rubrique indique comment publier des métadonnées de manière non sécurisée. Tout client peut récupérer les métadonnées du service. Si votre service doit publier les métadonnées de manière sécurisée, consultez Point de terminaison de métadonnées sécurisé personnalisée. |
Pour plus d'informations sur le sujet suivant la publication des métadonnées dans le code, consultez Comment : publier les métadonnées d'un service à l'aide de code. La publication des métadonnées permet aux clients de récupérer les métadonnées via une requête WS-Transfer GET ou une requête HTTP/GET à l'aide de la chaîne de requête ?wsdl. Pour être sûr que le code fonctionne, créez un service WCF de base. Pour plus de simplicité, un service auto-hébergé de base est fourni dans le code suivant.
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace Metadata.Samples
{
[ServiceContract]
public interface ISimpleService
{
[OperationContract]
string SimpleMethod(string msg);
}
class SimpleService : ISimpleService
{
public string SimpleMethod(string msg)
{
Console.WriteLine("The caller passed in " + msg);
return "Hello " + msg;
}
}
class Program
{
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(SimpleService),
new Uri("https://localhost:8001/MetadataSample"));
try
{
// Open the service host to accept incoming calls
host.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
host.Close();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.Read();
}
}
}
}
Ce service est un service auto-hébergé, configuré à l'aide d'un fichier de configuration. Le fichier de configuration suivant sert de point de départ.
<configuration>
<system.serviceModel>
<services>
<service name="Metadata.Example.SimpleService">
<endpoint address=""
binding="basicHttpBinding"
contract="Metadata.Example.ISimpleService" />
</service>
</services>
<behaviors>
</behaviors>
</system.serviceModel>
</configuration>
Pour publier les métadonnées d'un service WCF à l'aide d'un fichier de configuration d'application
Dans le fichier App.config, après la fermeture de l'élément </services>, créez un élément <behaviors>.
<behaviors> </behaviors>
Dans l'élément <behaviors>, ajoutez un nouvel élément <serviceBehaviors>.
<behaviors> <serviceBehaviors> </serviceBehaviors> </behaviors>
Ajoutez un élément <behavior> à l'élément <serviceBehaviors> et spécifiez une valeur pour l'attribut name de l'élément <behavior>.
<behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> </behavior> </serviceBehaviors> </behaviors>
Ajoutez un élément <serviceMetadata> à l'élément <behavior>. Affectez à l'attribut httpGetEnabledtrue et à l'attribut policyVersion la valeur Policy15. httpGetEnabled permet au service de répondre aux demandes de métadonnées faites par une demande HTTP GET. policyVersion indique au service de se conformer à WS-Policy 1.5 lors de la génération des métadonnées.
<behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> </behavior> </serviceBehaviors> </behaviors>
Ajoutez un attribut behaviorConfiguration à l'élément <service> et spécifiez l'attribut name de l'élément <behavior> ajouté à l'étape 1, comme illustré dans l'exemple de code suivant.
<services> <service name="Metadata.Example.SimpleService" behaviorConfiguration="SimpleServiceBehavior"> ... </service> </services> <behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> </behavior> </serviceBehaviors> </behaviors>
Ajoutez un ou plusieurs éléments <endpoint> et attribuez au contrat la valeur IMetadataExchange, comme illustré dans l'exemple de code suivant.
<services> <service name="Metadata.Example.SimpleService" behaviorConfiguration="SimpleServiceBehavior"> <endpoint address="" binding="wsHttpBinding" contract="Metadata.Example.ISimpleService" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services>
Pour les points de terminaison de métadonnées ajoutés à l'étape précédente, affectez à l'attribut binding l'une des valeurs suivantes :
mexHttpBinding pour la publication HTTP.
mexHttpsBinding pour la publication HTTPS.
mexNamedPipeBinding pour la publication de canal nommé.
mexTcpBinding pour la publication TCP.
Pour les points de terminaison de métadonnées ajoutés à l'étape précédente, attribuez à l'adresse la valeur suivante :
Une chaîne vide pour utiliser l'adresse de base de l'application hôte comme point de publication si l'adresse de base est la même que la liaison de métadonnées.
Une adresse relative si l'application hôte a une adresse de base.
Une adresse absolue.
Créez et exécutez l'application console.
Utilisez Internet Explorer pour naviguer jusqu'à l'adresse de base du service (https://localhost:8001/MetadataSample dans cet exemple) et vérifiez que la publication des métadonnées est activée. Dans la négative, un message s'affiche en haut de la page résultante : "La publication des métadonnées pour ce service est actuellement désactivée".
Pour utiliser les points de terminaison par défaut
Pour configurer des métadonnées sur un service qui utilise les points de terminaison par défaut, spécifiez ServiceMetadataBehavior dans le fichier de configuration, comme dans l'exemple précédent, mais ne spécifiez aucun point de terminaison. Le fichier de configuration se présenterait alors comme suit.
<configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy12" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
Étant donné que le service a un ServiceMetadataBehavior avec le httpGetEnabled défini avec la valeur true, la publication des métadonnées est activée pour le service, et comme aucun point de terminaison n'a été ajouté explicitement, le runtime ajoute les points de terminaison par défaut. Pour plus d'informations sur le sujet suivant les points de terminaison par défaut, les liaisons et les comportements, consultez Configuration simplifiée et Simplified Configuration for WCF Services.
Exemple
L'exemple de code suivant affiche l'implémentation d'un service WCF de base et le fichier de configuration qui publie les métadonnées pour le service.
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace Metadata.Samples
{
[ServiceContract]
public interface ISimpleService
{
[OperationContract]
string SimpleMethod(string msg);
}
class SimpleService : ISimpleService
{
public string SimpleMethod(string msg)
{
Console.WriteLine("The caller passed in " + msg);
return "Hello " + msg;
}
}
class Program
{
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(SimpleService),
new Uri("https://localhost:8001/MetadataSample"));
try
{
// Open the service host to accept incoming calls
host.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
host.Close();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.Read();
}
}
}
}
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleServiceBehavior">
<serviceMetadata httpGetEnabled="True" policyVersion="Policy12" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Voir aussi
Tâches
Comment : héberger un service WCF dans une application managée
Self-Host
Comment : publier les métadonnées d'un service à l'aide de code
Référence
Concepts
Vue d'ensemble de l'architecture de métadonnées
Utilisation des métadonnées