Udostępnij za pośrednictwem


Nagłówki adresów

W przykładzie Nagłówki adresów pokazano, jak klienci mogą przekazywać parametry referencyjne do usługi przy użyciu programu Windows Communication Foundation (WCF).

Uwaga

Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.

Specyfikacja adresowania WS definiuje pojęcie odwołania do punktu końcowego jako sposób adresowania określonego punktu końcowego usługi sieci Web. W programie WCF odwołania do punktów końcowych są modelowane przy użyciu EndpointAddress klasy — EndpointAddress jest typem pola ServiceEndpoint Adres klasy.

Częścią modelu referencyjnego punktu końcowego jest to, że każde odwołanie może zawierać pewne parametry referencyjne, które dodają dodatkowe informacje identyfikujące. W programie WCF te parametry referencyjne są modelowane jako wystąpienia AddressHeader klasy.

W tym przykładzie klient dodaje parametr referencyjny do EndpointAddress punktu końcowego klienta. Usługa szuka tego parametru referencyjnego i używa jej wartości w logice operacji usługi "Hello".

Klient

Aby klient wysyłał parametr odwołania, musi dodać element AddressHeader do EndpointAddress elementu ServiceEndpoint. EndpointAddress Ponieważ klasa jest niezmienna, należy zmodyfikować adres punktu końcowego EndpointAddressBuilder przy użyciu klasy . Poniższy kod inicjuje klienta w celu wysłania parametru odwołania w ramach komunikatu.

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

Kod tworzy EndpointAddressBuilder element używający oryginału EndpointAddress jako wartości początkowej. Następnie dodaje nowo utworzony nagłówek adresu; wywołanie metody w celu CreateAddressHeader utworzenia nagłówka o określonej nazwie, przestrzeni nazw i wartości. Tutaj wartość to "John". Po dodaniu nagłówka do konstruktora ToEndpointAddress() metoda konwertuje konstruktora (modyfikowalnego) z powrotem na adres punktu końcowego (niezmienny), który jest przypisywany z powrotem do pola Adres punktu końcowego klienta.

Teraz, gdy klient wywołuje Console.WriteLine(client.Hello());metodę , usługa może uzyskać wartość tego parametru adresu, jak pokazano w wynikowych danych wyjściowych klienta.

Hello, John

Serwer

Implementacja operacji Hello() usługi używa bieżącego OperationContext do sprawdzania wartości nagłówków w komunikacie przychodzącym.

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;

Kod iteruje wszystkie nagłówki w komunikacie przychodzącym, wyszukując nagłówki, które są parametrami referencyjnymi o określonej nazwie i. Po znalezieniu parametru odczytuje wartość parametru i zapisuje go w zmiennej "id".

Aby skonfigurować, skompilować i uruchomić przykład

  1. Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.

  2. Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).

  3. Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.