Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O exemplo Untyped demonstra como definir contratos de operação que usam a classe Message.
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.
Este exemplo é baseado em Introdução. O contrato de serviço define uma operação que recebe um tipo de mensagem como um argumento e retorna uma mensagem. A operação coleta todos os dados necessários para calcular a soma do corpo da mensagem e, em seguida, envia a soma como corpo na mensagem de retorno.
[OperationContract(Action = CalculatorService.RequestAction, ReplyAction = CalculatorService.ReplyAction)]
Message ComputeSum(Message request);
No serviço, a operação recupera a matriz de inteiros passados na mensagem de entrada e, em seguida, calcula a soma. Para enviar uma resposta, o exemplo cria uma nova mensagem com a versão apropriada da mensagem e ação, e adiciona a soma computada como conteúdo. O código de exemplo a seguir demonstra isso.
public Message ComputeSum(Message request)
{
//The body of the message contains a list of numbers which will be
//read as a int[] using GetBody<T>
int result = 0;
int[] inputs = request.GetBody<int[]>();
foreach (int i in inputs)
{
result += i;
}
Message response = Message.CreateMessage(request.Version,
ReplyAction, result);
return response;
}
O cliente usa o código gerado pela ServiceModel Metadata Utility Tool (Svcutil.exe) para criar um proxy para o serviço remoto. Para enviar uma mensagem de solicitação, o cliente deve ter a versão da mensagem, que depende do canal subjacente. Assim, ele cria um novo OperationContextScope escopado ao canal proxy que ele criou, o que gera uma OperationContext com a versão correta da mensagem preenchida na sua propriedade OutgoingMessageHeaders.MessageVersion. O cliente passa uma matriz de entrada como o corpo para a mensagem de solicitação e, em seguida, invoca o ComputeSum no proxy. Em seguida, o cliente recupera a soma das entradas passadas acessando o GetBody<T> método na mensagem de resposta. O código de exemplo a seguir demonstra isso.
using (new OperationContextScope(client.InnerChannel))
{
// Call the Sum service operation.
int[] values = { 1, 2, 3, 4, 5 };
Message request = Message.CreateMessage(
OperationContext.Current.OutgoingMessageHeaders.MessageVersion,
RequestAction, values);
Message reply = client.ComputeSum(request);
int response = reply.GetBody<int>();
Console.WriteLine("Sum of numbers passed (1,2,3,4,5) = {0}",
response);
}
Este exemplo é um exemplo hospedado na Web e, portanto, apenas o executável do cliente deve ser executado. A seguir está a saída de exemplo no cliente.
Prompt>Client.exe
Sum of numbers passed (1,2,3,4,5) = 15
Press <ENTER> to terminate client.
Este exemplo é um exemplo hospedado na Web e, portanto, verifique o link fornecido na etapa 3 para ver como criar e executar o exemplo.
Para configurar, compilar e executar o exemplo
Verifique se você executou o procedimento de instalação do One-Time 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.