Exemplo de XmlReader

O exemplo XmlReader demonstra o processamento de um corpo de mensagem usando um XmlReaderarquivo . O exemplo é baseado em Introdução, que implementa um serviço de calculadora. Foi adicionada uma operação de serviço adicional, Sum, que aceita uma mensagem que contém uma matriz de valores a serem adicionados. O serviço lê a mensagem usando um XmlReaderarquivo .

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 interface da calculadora inclui uma operação de serviço chamada Sum que aceita um Message parâmetro, conforme mostrado no código de exemplo a seguir.

public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
    [OperationContract]
    Message Sum(Message message);
}

O cliente acessa primeiro criando uma matriz de valores inteiros Sum , depois criando uma mensagem da matriz e, em seguida, chamando o Sum método usando a mensagem criada, conforme mostrado no código de exemplo a seguir.

CalculatorClient client = new CalculatorClient();
//...

// Call the Sum service operation.
int[] values = { 1, 2, 3, 4, 5 };
using (new OperationContextScope(client.InnerChannel))
{
    Message request = Message.CreateMessage(OperationContext.Current.OutgoingMessageHeaders.MessageVersion, "http://Microsoft.ServiceModel.Samples/ICalculator/Sum", values);
    Message reply = client.Sum(request);
    int sum = reply.GetBody<int>();

    Console.WriteLine("Sum(1,2,3,4,5) = {0}", sum);
}

No serviço, a implementação da operação Sum de serviço acessa o corpo da mensagem usando um XmlReader objeto para iterar através dos valores a serem somados. O GetReaderAtBodyContents método é chamado para acessar o corpo da mensagem, conforme mostrado no código de exemplo a seguir.

public int Sum(Message message)
{
    int sum = 0;
    string text = "";

    //The body of the message contains a list of numbers that are read
    //directly using an XmlReader.
    XmlReader body = message.GetReaderAtBodyContents ();
    while (body.Read())
    {
        text = body.ReadString().Trim();
        if (text.Length>0)
        {
            sum += Convert.ToInt32(text);
        }
    }
    body.Close();
    Message response = Message.CreateMessage(
       "http://Microsoft.ServiceModel.Samples/ICalculator/SumResponse",
       sum);
    return response;
}

Quando você executa o exemplo, as solicitações e respostas da operação são exibidas na janela do console do cliente. Pressione ENTER na janela do cliente para desligar o cliente.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Sum(1,2,3,4,5) = 15

Press <ENTER> to terminate client.

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.