Dela via


Adressrubriker

Exemplet Adresshuvuden visar hur klienter kan skicka referensparametrar till en tjänst med hjälp av Windows Communication Foundation (WCF).

Anmärkning

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

Specifikationen WS-Addressing definierar begreppet slutpunktsreferens som ett sätt att hantera en viss webbtjänstslutpunkt. I WCF modelleras slutpunktsreferenser med hjälp av EndpointAddress-klassen, EndpointAddress är typen av fältet Adress i den klassen ServiceEndpoint.

En del av slutpunktsreferensmodellen är att varje referens kan ha några referensparametrar som lägger till extra identifierande information. I WCF modelleras dessa referensparametrar som instanser av AddressHeader klassen.

I det här exemplet lägger klienten till en referensparameter till EndpointAddress klientslutpunktens. Tjänsten söker efter den här referensparametern och använder dess värde i logiken för dess "Hello"-tjänståtgärd.

Klient

För att klienten ska kunna skicka en referensparameter måste den lägga till en AddressHeader i EndpointAddress .ServiceEndpoint Eftersom klassen EndpointAddress är oföränderlig måste du ändra en slutpunktsadress med hjälp av EndpointAddressBuilder -klassen. Följande kod initierar klienten för att skicka en referensparameter som en del av meddelandet.

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

Koden skapar en EndpointAddressBuilder med originalet EndpointAddress som ett initialt värde. Det lägger sedan till ett nyligen skapat adresshuvud. Anropet till CreateAddressHeader skapar en rubrik med ett visst namn, namnrymd och värde. Här är värdet "John". När huvud har lagts till byggaren konverterar ToEndpointAddress()-metoden den (föränderliga) byggaren tillbaka till en (oföränderlig) slutpunktsadress, som åter tilldelas klientslutpunktens adressfält.

Nu när klienten anropar Console.WriteLine(client.Hello());kan tjänsten hämta värdet för den här adressparametern, vilket visas i klientens resulterande utdata.

Hello, John

Server

Implementeringen av tjänståtgärden Hello() använder den nuvarande OperationContext för att kontrollera värdena för rubrikerna i det inkommande meddelandet.

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;

Koden itererar över alla rubriker i det inkommande meddelandet och letar efter rubriker som är referensparametrar med det specifika namnet och. När parametern hittas läser den värdet för parametern och lagrar den i variabeln "id".

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört One-Time installationsproceduren för Windows Communication Foundation-exempel.

  2. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

  3. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.