Partilhar via


Cabeçalhos de endereço

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

Observação

O procedimento de configuração e as instruções de compilação para este exemplo estão localizados 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 ponto de extremidade de serviço Web específico. No WCF, referências de ponto de extremidade são modeladas usando a classe EndpointAddress - EndpointAddress é o tipo do campo Endereço da classe ServiceEndpoint.

Parte do modelo de referência de ponto final é que cada referência pode carregar 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 AddressHeader classe.

Neste exemplo, o cliente adiciona um parâmetro de referência ao EndpointAddress 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 "Olá".

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 endpoint 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 original EndpointAddress como um valor inicial. Em seguida, 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 é "João". Uma vez que o cabeçalho é adicionado ao construtor, o método ToEndpointAddress() converte o construtor (mutável) novamente num endereço de ponto de extremidade (imutável), que é novamente atribuído 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 atual OperationContext 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 sobre todos os cabeçalhos na mensagem de entrada, procurando cabeçalhos que são parâmetros de referência com um nome específico. 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 do One-Time para os exemplos do Windows Communication Foundation.

  2. Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.

  3. Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.