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
Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
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).
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.