Partager via


Address Headers

L’exemple d’en-têtes d’adresse illustre comment les clients peuvent passer des paramètres de référence à un service à l’aide de Windows Communication Foundation (WCF).

Notes

La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent à la fin de cette rubrique.

La spécification WS-Addressing définit la référence de point de terminaison permettant de s'adresser à un point de terminaison de service Web particulier. Dans WCF, les références de point de terminaison sont modélisées à l’aide de la classe EndpointAddress, EndpointAddress correspondant au type du champ d’adresse de la classe ServiceEndpoint.

Chaque référence dans le modèle de référence de point de terminaison peut contenir des paramètres ajoutant des informations d'identification supplémentaires. Dans WCF, ces paramètres de référence sont modélisés sous forme d’instances de la classe AddressHeader.

Dans cet exemple, le client ajoute un paramètre de référence à l'adresse EndpointAddress de point de terminaison du client. Le service recherche ce paramètre et utilise sa valeur dans la logique de son opération « Hello ».

Client

Pour que le client envoie un paramètre de référence, il doit ajouter un en-tête AddressHeader à l'adresse EndpointAddress du ServiceEndpoint. La classe EndpointAddress étant immuable, le changement d'une adresse de point de terminaison doit être effectué à l'aide de la classe EndpointAddressBuilder. Le code suivant initialise le client pour envoyer un paramètre de référence dans le cadre de son message.

HelloClient client = new HelloClient();
EndpointAddressBuilder builder =
    new EndpointAddressBuilder(client.Endpoint.Address);
AddressHeader header =
    AddressHeader.CreateAddressHeader(IDName, IDNamespace, "John");
builder.Headers.Add(header);
client.Endpoint.Address = builder.ToEndpointAddress();

Le code crée un EndpointAddressBuilder en utilisant comme valeur initiale l'adresse EndpointAddress d'origine. Il ajoute alors l’en-tête d’adresse récemment créé. L’appel de CreateAddressHeader crée un en-tête avec une valeur, un nom et un espace de noms particuliers. Dans cet exemple, la valeur est « John ». Une fois l'en-tête ajouté au générateur, la méthode ToEndpointAddress() reconvertit le générateur (altérable) en une adresse de point de terminaison (immuable) assignée de nouveau au champ d'adresse de point de terminaison du client.

À présent, lorsque le client appelle la méthode Console.WriteLine(client.Hello());, le service peut obtenir la valeur de ce paramètre d'adresse, comme en témoigne le résultat obtenu par le client.

Hello, John

Serveur

L'implémentation de l'opération de service Hello() utilise le contexte OperationContext actuel pour inspecter la valeur des en-têtes figurant dans le message entrant.

string id = null;
// look at headers on incoming message
for (int i = 0;
     i < OperationContext.Current.IncomingMessageHeaders.Count;
     ++i)
{
    MessageHeaderInfo h = OperationContext.Current.IncomingMessageHeaders[i];
    // for any reference parameters with the correct name & namespace
    if (h.IsReferenceParameter &&
        h.Name == IDName &&
        h.Namespace == IDNamespace)
    {
        // read the value of that header
        XmlReader xr = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i);
        id = xr.ReadElementContentAsString();
    }
}
return "Hello, " + id;

Le code recherche les en-têtes correspondant à des paramètres de référence contenant le nom défini en parcourant tous les en-têtes figurant dans le message entrant. Lorsqu'il trouve un tel paramètre, il lit sa valeur, puis la stocke dans la variable « id ».

Pour configurer, générer et exécuter l'exemple

  1. Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.

  2. Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.

  3. Pour exécuter l’échantillon dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions fournies dans Exécution des échantillons Windows Communication Foundation.