Compartir a través de


Solicitud/respuesta sin tipo

Download sample

Este ejemplo muestra cómo definir contratos de operación que utilizan la clase de mensaje.

Nota

Las instrucciones de compilación y el procedimiento de instalación de este ejemplo se encuentran al final de este tema.

Este ejemplo se basa en el Ejemplo de introducción. El contrato de servicios define una operación que toma un tipo de mensaje como argumento y devuelve un mensaje. La operación recoge todos los datos necesarios para calcular la suma a partir del cuerpo del mensaje y, a continuación, la envía como cuerpo en el mensaje de retorno.

[OperationContract(Action = CalculatorService.RequestAction, ReplyAction = CalculatorService.ReplyAction)]
Message ComputeSum(Message request);

En el servicio, la operación recupera la matriz de enteros pasada en el mensaje de entrada y, a continuación, calcula la suma. Para enviar un mensaje de respuesta, el ejemplo crea un nuevo mensaje con la versión de mensaje y la acción adecuadas, y agrega la suma calculada como su cuerpo. En el siguiente ejemplo de código se muestra este caso.

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;
}

El cliente utiliza código generado por ServiceModel Metadata Utility Tool (Svcutil.exe) para crear un proxy al servicio remoto. Para enviar un mensaje de solicitud, el cliente debe tener la versión del mensaje, que depende del canal subyacente. Así, crea un nuevo OperationContextScope en el ámbito del canal de proxy que creó, que genera un OperationContext con la versión de mensaje correcta en su propiedad OutgoingMessageHeaders.MessageVersion. El cliente pasa una matriz de entrada como el cuerpo al mensaje de solicitud y, a continuación, invoca ComputeSum en el proxy. El cliente recupera a continuación la suma de las entradas por las que pasó teniendo acceso al método GetBody<T> en el mensaje de respuesta. En el siguiente ejemplo de código se muestra este caso.

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 ejemplo es un ejemplo hospedado en Web y, por tanto, sólo se debe ejecutar la aplicación ejecutable del cliente. Lo siguiente es el resultado del ejemplo en el cliente.

Prompt>Client.exe
Sum of numbers passed (1,2,3,4,5) = 15

Press <ENTER> to terminate client.

Este ejemplo es un ejemplo hospedado en Web. Por tanto, compruebe el vínculo proporcionado en el paso 3 para ver cómo generar y ejecutar el ejemplo.

Para configurar, generar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

  2. Para generar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.

  3. Para ejecutar el ejemplo en una configuración de equipos única o cruzada, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.