Freigeben über


Adressheader

Im Beispiel zu Adressheadern wird veranschaulicht, wie Clients Verweisparameter mit Windows Communication Foundation (WCF) an einen Dienst übergeben können.

Tipp

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

In der WS-Adressierungsspezifikation wird ein Endpunktverweis als Möglichkeit definiert, einen bestimmten Webdienstendpunkt zu adressieren. In WCF werden Endpunktverweise mit der EndpointAddress-Klasse modelliert. EndpointAddress ist der Typ des Address-Felds in der ServiceEndpoint-Klasse.

Bestandteil des Endpunktverweismodells ist, dass jeder Verweis einige Verweisparameter enthalten kann, die weitere identifizierende Informationen liefern. In WCF werden diese Endpunktverweise als Instanzen der AddressHeader-Klasse modelliert.

In diesem Beispiel fügt der Client der EndpointAddress des Clientendpunkts einen Verweisparameter hinzu. Der Dienst sucht diesen Verweisparameter und verwendet seinen Wert in der Logik des "Hello"-Dienstvorgangs.

Client

Damit der Client einen Verweisparameter senden kann, muss er der EndpointAddress von ServiceEndpoint einen AddressHeader hinzufügen. Da die EndpointAddress-Klasse unveränderlich ist, muss das Ändern einer Endpunktadresse mithilfe der EndpointAddressBuilder-Klasse erfolgen. Im folgenden Code wird der Client zum Senden eines Verweisparameters als Teil der Nachricht initialisiert.

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

Im Code wird ein EndpointAddressBuilder mit der ursprünglichen EndpointAddress als Anfangswert erstellt. Dann wird ein neu erstellter Adressheader hinzugefügt. Durch den Aufruf von CreateAddressHeader wird ein Header mit einem bestimmten Namen, Namespace und Wert erstellt. Hier lautet der Wert "John". Nach dem Hinzufügen des Headers zum Builder konvertiert die ToEndpointAddress()-Methode den (änderbaren) Builder zurück in eine (unveränderliche) Endpunktadresse. Diese wird dann wieder dem Address-Feld des Clientendpunkts zugewiesen.

Wenn der Client nun Console.WriteLine(client.Hello()); aufruft, kann der Dienst den Wert dieses Adressparameters abrufen, wie in der Ausgabe des Clients angezeigt.

Hello, John

Server

Bei der Implementierung des Servervorgangs Hello() wird der aktuelle OperationContext verwendet, um die Werte der Header in der eingehenden Nachricht zu überprüfen.

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;

Der Code durchläuft alle Header in der eingehenden Nachricht und sucht Header, bei denen es sich um Verweisparameter mit einem bestimmten Namen handelt. Wenn der Parameter gefunden wird, wird der Wert des Parameters gelesen und in der "id"-Variablen gespeichert.

So richten Sie das Beispiel ein, erstellen es und führen es aus

  1. Stellen Sie sicher, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.

  2. Zum Erstellen der C#- oder Visual Basic .NET-Version der Projektmappe befolgen Sie die unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.

  3. Wenn Sie das Beispiel in einer Konfiguration mit einem einzigen Computer oder computerübergreifend ausführen möchten, befolgen Sie die unter Durchführen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.