Compartir a través de


Enrutamiento por cuerpo

Download sample

Este ejemplo muestra cómo implementar un servicio que acepta los objetos de mensaje con cualquier acción SOAP. Este ejemplo se basa en Ejemplo de introducción que implementa un servicio de calculadora. El servicio implementa una operación Calculate única que acepta un parámetro de solicitud Message y devuelve una respuesta Message.

En este ejemplo, el cliente es una aplicación de consola (.exe) y el servicio se hospeda en IIS.

Nota

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

El ejemplo muestra el envío de mensajes según el contenido del cuerpo. El mecanismo de distribución de mensajes de modelo de servicio de Windows Communication Foundation (WCF) se basa en las acciones del mensaje. Sin embargo, hay muchos servicios web existentes que definen todas sus operaciones con Action="". Es imposible generar un servicio basado en WSDL que siga enviando mensajes de solicitud según la información de Action. Este ejemplo muestra un contrato de servicios basado en WSDL (WSDL está contenido en Service.wsdl, que está incluido con el ejemplo). El contrato de servicios es Calculadora, similar al utilizado en Ejemplo de introducción. Sin embargo, [OperationContract] especifica Action="" para todas las operaciones.

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples"),  
                 XmlSerializerFormat, DispatchByBodyBehavior]
    public interface ICalculator
    {
        [OperationContract(Action="")]
        double Add(double n1, double n2);
        [OperationContract(Action = "")]
        double Subtract(double n1, double n2);
        [OperationContract(Action = "")]
        double Multiply(double n1, double n2);
        [OperationContract(Action = "")]
        double Divide(double n1, double n2);
    }

Con un contrato, un servicio exige un DispatchByBodyBehavior de comportamiento de distribución personalizado para permitir que los mensajes se distribuyan entre operaciones. Este comportamiento de distribución inicializa el selector de operación personalizado DispatchByBodyElementOperationSelector con una tabla de los nombres de operación con clave por QName de elementos contenedores respectivos. DispatchByBodyElementOperationSelector mira la primera etiqueta del primer elemento secundario del cuerpo y selecciona la operación usando la tabla anteriormente mencionada.

El cliente utiliza un proxy generado automáticamente a partir de WSDL exportado por el servicio utilizando la Service Metadata Utility Tool (Svcutil.exe).

svcutil.exe  /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples /uxs https://localhost/servicemodelsamples/service.svc?wsdl /out:generatedProxy.cs

El hecho de que las acciones de todas las operaciones estén vacías no tiene ningún impacto en el código de cliente, salvo los parámetros Action en el proxy generado automáticamente.

El código de cliente realiza varios cálculos. Al ejecutar el ejemplo, las solicitudes y respuestas de la operación se muestran en la ventana de la consola del cliente. Presione ENTRAR en la ventana de cliente para cerrar el cliente.

Add(100, 15.99) = 115.99
Subtract(145, 76.54) = 68.46
Multiply(9, 81.25) = 731.25
Divide(22, 7) = 3.14285714285714

Press <ENTER> to terminate client.

Para configurar, generar y ejecutar el ejemplo

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

  2. Para generar 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.