Delen via


Adreskoppen

Het voorbeeld van adresheaders laat zien hoe clients referentieparameters aan een service kunnen doorgeven met behulp van WCF (Windows Communication Foundation).

Notitie

De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.

De WS-Adresseringsspecificatie definieert het begrip eindpuntverwijzing als een manier om een bepaald webservice-eindpunt aan te pakken. In WCF worden eindpuntverwijzingen gemodelleerd met behulp van de EndpointAddress klasse. EndpointAddress Dit is het type adresveld van de ServiceEndpoint klasse.

Een deel van het eindpuntreferentiemodel is dat elke verwijzing een aantal referentieparameters kan bevatten die extra identificatiegegevens toevoegen. In WCF worden deze referentieparameters gemodelleerd als exemplaren van AddressHeader klasse.

In dit voorbeeld voegt de client een referentieparameter toe aan het EndpointAddress clienteindpunt. De service zoekt naar deze referentieparameter en gebruikt de waarde ervan in de logica van de 'Hello'-servicebewerking.

Klant

De client moet een verwijzingsparameter toevoegen AddressHeader aan de EndpointAddressServiceEndpoint. Omdat de EndpointAddress klasse onveranderbaar is, moet het wijzigen van een eindpuntadres worden uitgevoerd met behulp van de EndpointAddressBuilder klasse. Met de volgende code wordt de client geïnitialiseerd om een referentieparameter te verzenden als onderdeel van het bericht.

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

De code maakt een EndpointAddressBuilder gebruik van het origineel EndpointAddress als een initiële waarde. Vervolgens wordt een zojuist gemaakte adreskop toegevoegd; de aanroep voor CreateAddressHeader het maken van een header met een bepaalde naam, naamruimte en waarde. Hier is de waarde 'John'. Zodra de header is toegevoegd aan de opbouwfunctie, converteert de ToEndpointAddress() methode de opbouwfunctie (onveranderbaar) terug naar een (onveranderbaar) eindpuntadres dat is toegewezen aan het veld Adres van het clienteindpunt.

Wanneer de client nu aanroept Console.WriteLine(client.Hello());, kan de service de waarde van deze adresparameter ophalen, zoals te zien is in de resulterende uitvoer van de client.

Hello, John

Server

De implementatie van de servicebewerking Hello() maakt gebruik van de huidige OperationContext om de waarden van de headers op het binnenkomende bericht te controleren.

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;

De code doorloopt alle headers in het binnenkomende bericht, op zoek naar headers die verwijzen naar parameters met de specifieke naam en. Wanneer de parameter wordt gevonden, wordt de waarde van de parameter gelezen en opgeslagen in de variabele id.

Het voorbeeld instellen, compileren en uitvoeren

  1. Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.

  2. Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.

  3. Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.