Adressheader
Im Beispiel zu Adressheadern wird veranschaulicht, wie Clients Verweisparameter mit Windows Communication Foundation (WCF) an einen Dienst übergeben können.
Hinweis: |
---|
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 CreateAddressHeadercreates
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
Stellen Sie sicher, dass Sie die Einmaliges Setupverfahren für Windows Communication Foundation-Beispiele ausgeführt haben.
Zum Erstellen der C#- oder Visual Basic .NET-Edition der Projektmappe befolgen Sie die unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den unter Running the Windows Communication Foundation Samples aufgeführten Anweisungen.
Hinweis: |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<Installationslaufwerk>:\WF_WCF_Samples
Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.
<Installationslaufwerk>:\WF_WCF_Samples\WCF\Basic\Client\AddressHeaders
|