Encabezados de dirección
El ejemplo de encabezados de dirección muestra cómo los clientes pueden pasar los parámetros de referencia a un servicio mediante Windows Communication Foundation (WCF).
Nota
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
La especificación del direccionamiento del WS define la noción de una referencia del punto de conexión como una manera de direccionar un punto de conexión de servicio Web determinado. En WCF, las referencias de punto de conexión se modelan mediante la clase EndpointAddress
: EndpointAddress
es el tipo del campo de dirección de la clase ServiceEndpoint
.
La parte del modelo de referencia de punto de conexión es que cada referencia puede llevar algunos parámetros de referencia que agregan información de identificación excepcional. En WCF, estos parámetros de referencia se modelan como instancias de la clase AddressHeader
.
En este ejemplo, el cliente agrega un parámetro de referencia a EndpointAddress
del punto de conexión del cliente. El servicio busca este parámetro de referencia y utiliza su valor en la lógica de su operación del servicio "Hola".
Remoto
Para que el cliente envíe un parámetro de referencia, debe agregar un AddressHeader
a EndpointAddress
de ServiceEndpoint
. Dado que la clase EndpointAddress
es inmutable, la modificación de una dirección del punto de conexión se debe hacer utilizando la clase EndpointAddressBuilder
. El código siguiente inicializa el cliente para enviar un parámetro de referencia como parte de su mensaje.
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();
El código crea un EndpointAddressBuilder
utilizando el EndpointAddress
original como un valor inicial. A continuación, agrega un encabezado de dirección recién creado; la llamada a CreateAddressHeader
crea un encabezado con un nombre determinado, espacio de nombres y valor. Aquí el valor es "John." Una vez agregado al generador el encabezado, el método ToEndpointAddress()
convierte el generador (mutable) en una dirección del punto de conexión (inmutable), la cual está asignada al campo de dirección del punto de conexión del cliente.
Ahora cuando el cliente llama a Console.WriteLine(client.Hello());
, el servicio puede obtener el valor de este parámetro de dirección, como se ha visto en el resultado del cliente.
Hello, John
Servidor
La implementación de la operación del servicioHello()
utiliza el OperationContext
actual para inspeccionar los valores de los encabezados en el mensaje entrante.
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;
El código produce iteraciones sobre todos los encabezados en el mensaje entrante, buscando encabezados que son parámetros de referencia con el nombre determinado y. Cuando se encuentra el parámetro, lee el valor del parámetro y lo almacena en la variante de "id.".
Configurar, compilar y ejecutar el ejemplo
Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.
Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.
Para ejecutar el ejemplo en una configuración de una sola máquina o de varias máquinas, siga las instrucciones que se indican en Ejecución de los ejemplos de Windows Communication Foundation.