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 EndpointAddress
ServiceEndpoint
. 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
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
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.
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.