Cómo: Obtener acceso a un servicio web de manera asincrónica en código administrado

Actualización: noviembre 2007

Cada método Web de una clase de servidor proxy de servicio Web tiene un homólogo asincrónico. La clase de servidor proxy genera automáticamente métodos asincrónicos y un evento correspondiente para cada método Web. Cuando se llama al método asincrónico, se ejecuta en otro subproceso y provoca su evento correspondiente cuando vuelve. Puede ejecutar el código cuando un método asincrónico vuelve mediante la creación de un controlador para su evento correspondiente.

Llamar a un método Web de forma asincrónica con Visual Basic

  1. Declare una instancia de clase de servidor proxy de servicio Web utilizando la palabra clave WithEvents, como se muestra a continuación:

    Dim WithEvents myWebService As New Service1
    
    Nota:

    El proyecto debe contener una referencia Web al servicio Web.

  2. En el Editor de código, utilice la palabra clave Handles para crear un controlador de eventos para el evento MethodCompleted que corresponde al método que desea llamar. Por ejemplo, si se realiza una llamada al método denominado HelloWorld de forma asincrónica, se crearía un método parecido al siguiente:

    Private Sub HelloWorldComplete(ByVal sender As Object, _
       ByVal completed As localhost.HellowWorldCompletedEventArgs) _
       Handles myWebService.HelloWorldCompleted
    ' Insert code to implement the method here
    End Sub
    

    Observe que el método que controla el evento MethodCompleted debe coincidir con la firma del evento. Para ello, normalmente es necesario un argumento Object que representa al remitente y una instancia del método EventArgs que reside en el mismo espacio de nombres que la clase de servidor proxy de servicio Web. También puede hacer que el Editor de código cree controladores de eventos automáticamente. Para obtener más información, vea Cómo: Crear controladores de eventos en el Editor de código de Visual Basic.

  3. Llame al método Web utilizando el formulario MethodAsync del método. Por ejemplo, si realiza una llamada a un método Web denominado HelloWorld de forma asincrónica, tendría el siguiente aspecto:

    HelloWorldAsync
    

    Observe que el valor que devuelve el método está disponible en la propiedad Result de EventArgs.

Llamar a un método Web de forma asincrónica con C#

  1. Declare una instancia de clase de servidor proxy de servicio Web, como se muestra a continuación:

    private localhost.Service1 myWebService = new localhost.Service1
    ();
    
    Nota:

    El proyecto debe contener una referencia Web al servicio Web.

  2. En el Editor de código, agregue un controlador de eventos para el evento MethodCompleted que corresponda al método que desea llamar. Por ejemplo, si se realiza una llamada al método denominado HelloWorld de forma asincrónica, se crearía un método parecido al siguiente:

    private void HelloWorldCompleted(Object sender, 
        localhost.HelloWorldCompletedEventArgs Completed) 
        {
            // Insert code to implement the method here
        }
    

    Observe que el método que controla el evento MethodCompleted debe coincidir con la firma del evento. Para ello, normalmente es necesario un argumento Object que representa al remitente y una instancia del método EventArgs que reside en el mismo espacio de nombres que la clase de servidor proxy de servicio Web. También puede hacer que el Editor de código cree controladores de eventos automáticamente. Para obtener más información, vea Cómo: Suscribir y cancelar la suscripción a eventos (Guía de programación de C#).

  3. En el constructor de la clase, agregue el controlador de eventos de MethodCompleted a la lista de controladores de ese evento como se muestra a continuación:

    private void Form1_Load(object sender, EventArgs e)
    {
        myWebService.HelloWorldCompleted += new 
        localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted);
    }
    
  4. Llame al método Web utilizando el formulario MethodAsync del método. Por ejemplo, si realiza una llamada a un método Web denominado HelloWorld de forma asincrónica, tendría el siguiente aspecto:

    HelloWorldAsync();
    

    Observe que el valor que devuelve el método está disponible en la propiedad Result de EventArgs.

Vea también

Conceptos

Comunicar de forma asincrónica con servicios web XML

Otros recursos

Obtener acceso a servicios web en código administrado