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
Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.
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.
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.