Tutorial: Llamar a los servicios Web XML desde un formulario Windows Forms
Actualización: noviembre 2007
Los servicios Web XML Web es una función de Visual Studio que le permite desarrollar aplicaciones que intercambian mensajes en un entorno débilmente acoplado mediante protocolos estándar como HTTP, XML, XSD, SOAP y WSDL. Los mensajes pueden estructurarse y dotarse de tipos o estar débilmente definidos. Debido a que la función de servicios Web se basa en protocolos estándar, las aplicaciones de servicios Web pueden comunicarse con una amplia gama de implementaciones, plataformas y dispositivos. Para obtener más información, vea Servicios web en código administrado.
Puede utilizar los servicios Web para mejorar la funcionalidad de los formularios Windows Forms. Conectar formularios Windows Forms con servicios Web es tan sencillo como realizar llamadas a los métodos de servicios Web, los cuales se procesan en un servidor que a continuación devuelve los resultados de la llamada al método.
Hay dos tipos de métodos de servicio Web: sincrónico y asincrónico. Cuando se llama a métodos sincrónicos de servicios Web, el código de llamada espera a que el servicio Web responda antes de continuar sus operaciones. Cuando se llama a métodos asincrónicos de servicios Web, se puede continuar utilizando el subproceso de llamada mientras se espera a que responda el servicio Web. Esto le permite utilizar el conjunto existente de subprocesos de manera eficaz en la aplicación cliente. Para obtener más información sobre cómo trabajar con métodos de servicio Web sincrónicos y asincrónicos, vea Obtener acceso a servicios web en código administrado.
Métodos sincrónicos de servicios Web
Una llamada a un método sincrónico de servicio Web implica llamar al método y esperar a que se produzca el cálculo en el servidor y devuelva un valor, antes de continuar con el resto del código del formulario Windows Forms.
Para crear un servicio Web XML
Cree una aplicación de servicio Web. Para obtener más información, vea Crear servicios web en código administrado.
En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en el archivo .asmx y elija Ver código.
Cree un método de servicio Web que realice sumas. En el ejemplo de código siguiente se muestra un método de servicio Web que toma dos números enteros y los suma, devolviendo la resultado.
<WebMethod()> Public Function WebAdd(ByVal x As Integer, ByVal y As Integer) As Integer Return x + y End Function
[WebMethod] public int WebAdd(int x, int y) { return x + y; }
/** @attribute WebMethod() */ public int WebAdd(int x, int y) { return x + y; }
Cree un método de servicio Web que realice multiplicaciones. En el ejemplo de código siguiente se muestra un método de servicio Web que toma dos números enteros y los multiplica, devolviendo el producto.
<WebMethod()> Public Function WebMultiply(ByVal x As Integer, ByVal y As Integer) As Integer Return x * y End Function
[WebMethod] public int WebMultiply(int x, int y) { return x * y; }
/** @attribute WebMethod() */ public int WebMultiply(int x, int y) { return x * y; }
En el menú Generar, elija Generar solución. También puede desplazarse al archivo .asmx que creó en el proyecto para aprender más sobre los servicios Web. El servicio Web está ahora disponible para llamarlo desde un formulario Windows Forms.
Para llamar a un servicio Web XML sincrónicamente
Cree una nueva aplicación Windows. Para obtener más información, vea Cómo: Crear un proyecto de aplicación para Windows.
Nota de seguridad: Las llamadas a los métodos Web requieren un nivel de privilegio concedido por la clase WebPermission. Si va a ejecutar el código en un contexto parcialmente confiable, el proceso puede producir una excepción. Para obtener más información, vea Conceptos básicos sobre la seguridad de acceso a código.
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nodo Referencias del proyecto y, a continuación, haga clic en Agregar referencia Web.
Se abrirá el cuadro de diálogo Agregar referencia Web.
Escriba el siguiente identificador URI de servicio Web en el cuadro Dirección y presione ENTRAR:
https://localhost/WebService1/Service1.asmx
Éste es el identificador URI del servicio Web que creó en el procedimiento anterior. Los métodos Web WebAdd y WebMultiply aparecerán en el panel izquierdo del cuadro de diálogo Agregar referencia Web.
Haga clic en Agregar referencia.
En el Cuadro de herramientas, agregue tres controles TextBox y dos controles Button. Los cuadros de texto serán para los números y los botones se emplearán para los cálculos y para llamar a los métodos de servicio Web.
Establezca las propiedades de los controles de la manera siguiente:
Control
Propiedad
Text
TextBox1
Text
0
TextBox2
Text
0
TextBox3
Text
0
Button1
Text
Add
Button2
Text
Multiply
Haga clic con el botón secundario del mouse (ratón) en el formulario y elija Ver código.
Cree una instancia del servicio Web como miembro de la clase. Necesitará conocer el nombre del servidor donde creó el servicio Web anteriormente.
' Replace localhost below with the name of the server where ' you created the Web service. Dim MathServiceClass As New localhost.Service1()
localhost.Service1 MathServiceClass = new localhost.Service1();
localhost.Service1 MathServiceClass = new localhost.Service1();
Cree un controlador para el evento Click del control Button1. Para obtener información detallada, vea Cómo: Crear controladores de eventos con el diseñador.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Create instances of the operands and result. Dim x, y, z As Integer ' Parse the contents of the text boxes into integers. x = Integer.Parse(TextBox1.Text) y = Integer.Parse(TextBox2.Text) ' Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebAdd(x, y) TextBox3.Text = z.ToString End Sub
private void button1_Click(object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebAdd(x, y); textBox3.Text = z.ToString(); }
(Visual C#) Coloque el código siguiente en el constructor del formulario para registrar el controlador de eventos.
this.button1.Click += new System.EventHandler(this.button1_Click); private void button1_Click (Object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = Integer.parseInt(textBox1.get_Text()); y = Integer.parseInt(textBox2.get_Text()); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebAdd(x, y); textBox3.set_Text(""+z); }
Cree un controlador de eventos para el evento Click de Button2 de la misma forma, y agregue el código siguiente.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Create instances of the operands and result. Dim x, y, z As Integer ' Parse the contents of the text boxes into integers. x = Integer.Parse(TextBox1.Text) y = Integer.Parse(TextBox2.Text) ' Call the WebMultiply Web service method from the instance of the Web service. z = MathServiceClass.WebMultiply(x, y) TextBox3.Text = z.ToString End Sub
private void button2_Click(object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebMultiply(x, y); textBox3.Text = z.ToString(); }
(Visual C#) Coloque el código siguiente en el constructor del formulario para registrar el controlador de eventos.
this.button2.Click += new System.EventHandler(this.button2_Click); private void button2_Click (Object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = Integer.parseInt(textBox1.get_Text()); y = Integer.parseInt(textBox2.get_Text()); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebMultiply(x, y); textBox3.set_Text(""+z); }
Presione F5 para ejecutar la aplicación.
Escriba los valores de los dos primeros cuadros de texto. Al presionar el botón Sumar, el tercer cuadro de texto debe mostrar la suma. Al presionar el botón Multiplicar, el tercer cuadro de texto debe mostrar el producto.
Nota: La primera llamada a un servicio Web tarda un tiempo para que el servidor lo procese, ya que su instancia reside en el servidor. Tenga este punto en cuenta al presionar los botones de la aplicación. Este retardo se trata en la sección siguiente.
Pasos siguientes
Al llamar a métodos de servicios Web asincrónicos, la aplicación continúa ejecutándose mientras espera a que el servicio Web responda. De esta forma, podrá utilizar los recursos eficazmente en la aplicación cliente.
Para obtener más información, vea Cómo: Obtener acceso a un servicio web de manera asincrónica en código administrado.
Vea también
Tareas
Cómo: Enlazar a un servicio Web mediante el componente BindingSource de formularios Windows Forms
Conceptos
Elegir entre formularios Windows Forms y formularios Web Forms
Referencias web en Visual Studio
Cómo: Generar un proxy de servicio web