Compartilhar via


Cabeçalhos de endereço

O exemplo cabeçalhos de endereço demonstra como os clientes podem passar parâmetros de referência para um serviço usando o WCF (Windows Communication Foundation).

Observação

O procedimento de instalação e as instruções de compilação dessa amostra estão no final deste tópico.

A especificação WS-Addressing define a noção de uma referência de ponto de extremidade como uma maneira de abordar um determinado ponto de extremidade de serviço Web. No WCF, as referências de ponto de extremidade são modeladas usando a classe EndpointAddressEndpointAddress é o tipo do campo Endereço da classe ServiceEndpoint.

Parte do modelo de referência do ponto de extremidade é que cada referência pode levar alguns parâmetros de referência que adicionam informações de identificação extras. No WCF, esses parâmetros de referência são modelados como instâncias de classe AddressHeader.

Neste exemplo, o cliente adiciona um parâmetro de referência ao EndpointAddress do ponto de extremidade do cliente. O serviço procura esse parâmetro de referência e usa seu valor na lógica de sua operação de serviço "Hello".

Cliente

Para que o cliente envie um parâmetro de referência, ele deve adicionar um AddressHeader ao EndpointAddress do ServiceEndpoint. Como a classe EndpointAddress é imutável, a modificação de um endereço de ponto de extremidade deve ser feita usando a classe EndpointAddressBuilder. O código a seguir inicializa o cliente para enviar um parâmetro de referência como parte de sua mensagem.

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

O código cria um EndpointAddressBuilder usando o EndpointAddress original como um valor inicial. Em seguida, ele adiciona um cabeçalho de endereço recém-criado; a chamada para CreateAddressHeader cria um cabeçalho com um nome, namespace e valor específicos. Aqui o valor é "John". Depois que o cabeçalho é adicionado ao construtor, o método ToEndpointAddress() converte o construtor (mutável) de volta em um endereço de ponto de extremidade (imutável), que é atribuído de volta ao campo Endereço do ponto de extremidade do cliente.

Agora, quando o cliente chama Console.WriteLine(client.Hello());, o serviço é capaz de obter o valor desse parâmetro de endereço, como visto na saída resultante do cliente.

Hello, John

Servidor

A implementação da operação de serviço Hello() usa o OperationContext atual para inspecionar os valores dos cabeçalhos na mensagem de entrada.

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;

O código itera em todos os cabeçalhos na mensagem de entrada, procurando cabeçalhos que são parâmetros de referência com o nome específico e. Quando o parâmetro é encontrado, ele lê o valor do parâmetro e o armazena na variável "id".

Para configurar, compilar, e executar o exemplo

  1. Verifique se você executou o Procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation.

  3. Para executar a amostra em uma configuração de computador único ou entre computadores, siga as instruções contidas em Como executar as amostras do Windows Communication Foundation.