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 EndpointAddress
– EndpointAddress
é 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
Verifique se você executou o Procedimento de instalação única para os exemplos do Windows Communication Foundation.
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.
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.