Compartir vía


Interoperación con servicios web ASMX

En el ejemplo ASMX se muestra cómo integrar una aplicación cliente de Windows Communication Foundation (WCF) con un servicio web ASMX existente.

Nota:

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

Este ejemplo consta de un programa de consola de cliente (.exe) y una biblioteca de servicios (.dll) hospedada por Internet Information Services (IIS). El servicio es un servicio web ASMX que implementa un contrato que define un patrón de comunicación de solicitud-respuesta. El servicio expone operaciones matemáticas (Add, Subtract, Multiplyy Divide). El cliente realiza solicitudes sincrónicas a una operación matemática y el servicio responde con el resultado. La actividad del cliente está visible en la ventana de la consola.

La implementación del servicio web ASMX que se muestra en el código de ejemplo siguiente calcula y devuelve el resultado adecuado.

[WebService(Namespace="http://Microsoft.ServiceModel.Samples")]
public class CalculatorService : System.Web.Services.WebService
    {
        [WebMethod]
        public double Add(double n1, double n2)
        {
            return n1 + n2;
        }
        [WebMethod]
        public double Subtract(double n1, double n2)
        {
            return n1 - n2;
        }
        [WebMethod]
        public double Multiply(double n1, double n2)
        {
            return n1 * n2;
        }
        [WebMethod]
        public double Divide(double n1, double n2)
        {
            return n1 / n2;
        }
    }

Como se ha configurado, el servicio puede ser accedido por un cliente en el mismo equipo en http://localhost/servicemodelsamples/service.asmx. Para que los clientes de máquinas remotas accedan al servicio, se debe especificar un nombre de dominio completo en lugar de localhost.

La comunicación se realiza a través de un cliente generado por la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe). El cliente está incluido en el archivo generatedClient.cs. El servicio ASMX debe estar disponible para generar el código proxy, ya que se usa para recuperar los metadatos actualizados. Ejecute el comando siguiente desde un símbolo del sistema en el directorio del cliente para generar el proxy especificado.

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

Mediante el cliente generado, puede acceder a un punto de conexión de servicio configurando la dirección y el enlace adecuados. Al igual que el servicio, el cliente usa un archivo de configuración (App.config) para especificar el punto de conexión con el que comunicarse. La configuración del punto de conexión de cliente consta de una dirección absoluta para el punto de conexión de servicio, el enlace y el contrato, como se muestra en la siguiente configuración de ejemplo.

<client>
   <endpoint
      address="http://localhost/ServiceModelSamples/service.asmx"
      binding="basicHttpBinding"
      contract="Microsoft.ServiceModel.Samples.CalculatorServiceSoap" />
</client>

La implementación del cliente construye una instancia del cliente generado. Después, el cliente generado se puede usar para comunicarse con el servicio.

// Create a client.
CalculatorServiceSoapClient client = new CalculatorServiceSoapClient();

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

//Closing the client gracefully closes the connection and cleans up resources.
client.Close();

Console.WriteLine();
Console.WriteLine("Press <ENTER> to terminate client.");
Console.ReadLine();

Al ejecutar el ejemplo, las solicitudes de operación y las respuestas se muestran en la ventana de la consola del cliente. Presione ENTRAR en la ventana del cliente para apagar 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, compilar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.

  3. Para ejecutar el ejemplo en una configuración de una sola máquina o de varias máquinas, siga las instrucciones que se indican en Ejecución de los ejemplos de Windows Communication Foundation.