AdressheaderAddress Headers

Beispiel zu Adressheadern wird veranschaulicht, wie Clients Verweisparameter an einen Dienst mithilfe von Windows Communication Foundation (WCF) übergeben können.The Address Headers sample demonstrates how clients can pass reference parameters to a service using Windows Communication Foundation (WCF).

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

In der WS-Adressierungsspezifikation wird ein Endpunktverweis als Möglichkeit definiert, einen bestimmten Webdienstendpunkt zu adressieren.The WS-Addressing specification defines the notion of an endpoint reference as a way to address a particular Web service endpoint. In WCF werden Endpunktverweise mit der EndpointAddress Class - EndpointAddress ist der Typ des Address-Felds, der die ServiceEndpoint Klasse.In WCF, endpoint references are modeled using the EndpointAddress class - EndpointAddress is the type of the Address field of the ServiceEndpoint class.

Bestandteil des Endpunktverweismodells ist, dass jeder Verweis einige Verweisparameter enthalten kann, die weitere identifizierende Informationen liefern.Part of the endpoint reference model is that each reference can carry some reference parameters that add extra identifying information. In WCF diese Endpunktverweise als Instanzen der AddressHeader Klasse.In WCF, these reference parameters are modeled as instances of AddressHeader class.

In diesem Beispiel fügt der Client der EndpointAddress des Clientendpunkts einen Verweisparameter hinzu.In this sample, the client adds a reference parameter to the EndpointAddress of the client endpoint. Der Dienst sucht diesen Verweisparameter und verwendet seinen Wert in der Logik des "Hello"-Dienstvorgangs.The service looks for this reference parameter and uses its value in the logic of its "Hello" service operation.

ClientClient

Damit der Client einen Verweisparameter senden kann, muss er der AddressHeader von EndpointAddress einen ServiceEndpoint hinzufügen.For the client to send a reference parameter, it must add an AddressHeader to the EndpointAddress of the ServiceEndpoint. Da die EndpointAddress-Klasse unveränderlich ist, muss das Ändern einer Endpunktadresse mithilfe der EndpointAddressBuilder-Klasse erfolgen.Because the EndpointAddress class is immutable, modification of an endpoint address must be done using the EndpointAddressBuilder class. Im folgenden Code wird der Client zum Senden eines Verweisparameters als Teil der Nachricht initialisiert.The following code initializes the client to send a reference parameter as part of its message.

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.The code creates an EndpointAddressBuilder using the original EndpointAddress as an initial value. Dann wird ein neu erstellter Adressheader hinzugefügt. Durch den Aufruf von CreateAddressHeadercreates wird ein Header mit einem bestimmten Namen, Namespace und Wert erstellt.It then adds a newly created address header; the call to CreateAddressHeadercreates a header with a particular name, namespace, and value. Hier lautet der Wert "John".Here the value is "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.Once the header is added to the builder, the ToEndpointAddress() method converts the (mutable) builder back into an (immutable) endpoint address, which is assigned back to the client endpoint's Address field.

Wenn der Client nun Console.WriteLine(client.Hello()); aufruft, kann der Dienst den Wert dieses Adressparameters abrufen, wie in der Ausgabe des Clients angezeigt.Now when the client calls Console.WriteLine(client.Hello());, the service is able to get the value of this address parameter, as seen in the resulting output of the client.

Hello, John

ServerServer

Bei der Implementierung des Servervorgangs Hello() wird der aktuelle OperationContext verwendet, um die Werte der Header in der eingehenden Nachricht zu überprüfen.The implementation of the service operation Hello() uses the current OperationContext to inspect the values of the headers on the incoming message.

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.The code iterates over all the headers on the incoming message, looking for headers that are reference parameters with the particular name and. Wenn der Parameter gefunden wird, wird der Wert des Parameters gelesen und in der "id"-Variablen gespeichert.When the parameter is found, it reads the value of the parameter and stores it in the "id" variable.

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Client\AddressHeaders

Siehe auchSee Also