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).

Nota

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, as referências de ponto de extremidade são modeladas usando a EndpointAddress classe - EndpointAddress é o tipo do campo Endereço da ServiceEndpoint classe.

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 é imutável, a EndpointAddress modificação de um endereço de ponto de extremidade deve ser feita usando a EndpointAddressBuilder classe. 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". Depois que o cabeçalho é adicionado ao construtor, o método converte ToEndpointAddress() 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 Hello() de serviço usa a corrente 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 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. Certifique-se de ter executado o procedimento de instalação única 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.