Utilisation de points de terminaison standard
L’exemple StandardEndpoints montre comment utiliser des points de terminaison standard dans des fichiers de configuration de service. Un point de terminaison standard permet à l’utilisateur de simplifier des définitions de point de terminaison en utilisant une propriété unique pour décrire une combinaison adresse, liaison et contrat avec les propriétés supplémentaires qui lui sont associées. Cet exemple montre comment définir et implémenter un point de terminaison standard personnalisé et comment définir des propriétés spécifiques dans le point de terminaison.
Détails de l'exemple
Les points de terminaison de service peuvent être spécifiés en fournissant trois paramètres : adresse, liaison et contrat. D'autres paramètres peuvent être fournis : configuration du comportement, en-têtes, URI d'écoute, et ainsi de suite. Il peut arriver que certains ou l’ensemble des adresses, liaisons et contrats aient des valeurs qui ne peuvent pas changer. C'est pourquoi il est possible d'utiliser des points de terminaison standard. Les points de terminaison d'échange de métadonnées et de découverte en sont des exemples. Les points de terminaison standard facilitent également l'utilisation en autorisant la configuration de points de terminaison de service sans avoir à fournir des informations d'une nature fixe ou à créer leurs propres points de terminaison standard, afin, par exemple, de faciliter l'utilisation en fournissant un jeu raisonnable de valeurs par défaut, ce qui réduit les commentaires des fichiers de configuration.
Cet exemple se compose de deux projets : le service qui définit deux points de terminaison standard et le client qui communique avec ce service. La façon dont les points de terminaison standard du service sont définis dans le fichier de configuration est illustrée dans l'exemple suivant.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<extensions>
<endpointExtensions>
<add name="customEndpoint" type="Microsoft.Samples.StandardEndpoints.CustomEndpointCollectionElement, service" />
</endpointExtensions>
</extensions>
<services>
<service name="Microsoft.Samples.StandardEndpoints.CalculatorService">
<endpoint address="http://localhost:8000/Samples/Service.svc/customEndpoint" contract="Microsoft.Samples.StandardEndpoints.ICalculator" kind="customEndpoint" />
<endpoint kind="mexEndpoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
<standardEndpoints>
<customEndpoint>
<standardEndpoint property="True" />
</customEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Le premier point de terminaison défini pour le service est du genre customEndpoint
(dont la définition est visible dans la section <standardEndpoints>
) où la valeur property
est affectée à la propriété true
. C'est le cas d'un point de terminaison personnalisé avec une nouvelle propriété. Le deuxième point de terminaison correspond à un point de terminaison de métadonnées, où les valeurs d’adresse, de liaison et de contrat sont fixes.
Pour définir l'élément du point de terminaison standard, une classe qui dérive de StandardEndpointElement
doit être créée. Dans le cas de cet exemple, la classe CustomEndpointElement
a été définie comme indiqué dans l'exemple suivant.
public class CustomEndpointElement : StandardEndpointElement
{
public bool Property
{
get { return (bool)base["property"]; }
set { base["property"] = value; }
}
protected override ConfigurationPropertyCollection Properties
{
get
{
ConfigurationPropertyCollection properties = base.Properties;
properties.Add(new ConfigurationProperty("property", typeof(bool), false, ConfigurationPropertyOptions.None));
return properties;
}
}
protected override Type EndpointType
{
get { return typeof(CustomEndpoint); }
}
protected override ServiceEndpoint CreateServiceEndpoint(ContractDescription contract)
{
return new CustomEndpoint();
}
protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
{
CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
customEndpoint.Property = this.Property;
}
protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
{
CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
customEndpoint.Property = this.Property;
}
protected override void OnInitializeAndValidate(ServiceEndpointElement serviceEndpointElement)
{
}
protected override void OnInitializeAndValidate(ChannelEndpointElement channelEndpointElement)
{
}
}
Dans la fonction CreateServiceEndpoint
, un objet CustomEndpoint
est créé. Sa définition est représentée dans l’exemple suivant :
public class CustomEndpoint : ServiceEndpoint
{
public CustomEndpoint()
: this(string.Empty)
{
}
public CustomEndpoint(string address)
: this(address, ContractDescription.GetContract(typeof(ICalculator)))
{
}
public CustomEndpoint(string address, ContractDescription contract)
: base(contract)
{
this.Binding = new BasicHttpBinding();
this.IsSystemEndpoint = false;
}
public bool Property
{
get;
set;
}
}
Pour permettre la communication entre service et client, une référence au service est créée dans le client. Lorsque l'exemple est généré et exécuté, le service s'exécute et le client communique avec lui. Notez que la référence de service doit être mise à jour à chaque modification du service.
Pour utiliser cet exemple
À l’aide de Visual Studio, ouvrez le fichier StandardEndpoints.sln.
Permettez à plusieurs projets de démarrer.
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur la solution Standard Endpoints et sélectionnez Propriétés.
Dans Propriétés communes, sélectionnez Projet de démarrage, puis cliquez sur Plusieurs projets de démarrage.
Déplacez le projet Service vers le début de la liste, avec l’ActionDémarrer.
Déplacez le projet Client après le projet Service, également avec l’ActionDémarrer.
De cette façon, le projet Client est exécuté après le projet Service.
Pour exécuter la solution, appuyez sur F5.
Notes
Si ces étapes ne fonctionnent pas, vérifiez que votre environnement a été correctement configuré, en procédant comme suit :
- Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.
- Pour générer la solution, suivez les instructions indiquées dans la rubrique Génération des exemples Windows Communication Foundation.
- Pour exécuter l’exemple dans une configuration à un ou plusieurs ordinateurs, suivez les instructions figurant dans Exécution des exemples Windows Communication Foundation.