Compartir a través de


Cómo: Crear métodos de servicios web asincrónicos

Este tema es específico de una tecnología heredada. Ahora, los servicios Web XML y los clientes de servicios Web XML deben crearse con Windows Communication Foundation.

Este procedimiento describe cómo convertir un método de servicio Web en un par de métodos diseñados para el acceso asincrónico. Se sigue el modelo de diseño asincrónico de .NET Framework. En el tema Métodos asincrónicos del servicio web XML se explica cómo funciona este procedimiento, así como cómo la herramienta Wsdl.exe genera clases de proxy cliente que pueden tener acceso de forma asincrónica a los métodos de servicios Web, aun cuando están diseñados para el acceso sincrónico.

Para implementar un método de servicio Web asincrónico

  1. Divida un método de servicio Web sincrónico en dos métodos, cada uno con el mismo nombre base, uno con ese nombre empezando con Begin y el otro con End.

  2. La lista de parámetros del método Begin contiene todos los parámetros in y by reference para la funcionalidad del método además de dos parámetros adicionales.

    • Los parámetros By reference se enumeran como parámetros in.

    • El penúltimo parámetro debe ser AsyncCallback. El parámetro AsyncCallback permite a un cliente proporcionar un delegado, que se invoca cuando finaliza el método. Cuando un método de servicio Web asincrónico llama a otro método asincrónico, este parámetro se puede pasar en el penúltimo parámetro de ese método.

    • El último parámetro es Object. El parámetro Object permite a un llamador proporcionar información de estado al método. Cuando un método de servicio Web asincrónico llama a otro método asincrónico, este parámetro se puede pasar en el último parámetro de ese método.

    • El valor devuelto debe ser de tipo IAsyncResult.

  3. La lista de parámetros para el método End está compuesto de IAsyncResult seguido de cualquier parámetro out y by reference específico para la funcionalidad del método.

    • El valor devuelto es del mismo tipo que el valor devuelto de un método de servicio Web sincrónico.

    • Los parámetros By reference se enumeran como parámetros out.

Ejemplo

using System;
using System.Web.Services;

[WebService(Namespace="https://www.contoso.com/")]
public class MyService : WebService 
{
    public RemoteService remoteService;
    public MyService() 
    {
        // Create a new instance of proxy class for 
        // the Web service to be called.
        remoteService = new RemoteService();
    }
    // Define the Begin method.
    [WebMethod]
    public IAsyncResult BeginGetAuthorRoyalties(String Author,
        AsyncCallback callback, object asyncState) 
    {
        // Begin asynchronous communictation with a different XML Web
        // service.
        return remoteService.BeginReturnedStronglyTypedDS(Author,
            callback,asyncState);
    }
    // Define the End method.
    [WebMethod]
    public AuthorRoyalties EndGetAuthorRoyalties(IAsyncResult
        asyncResult) 
    {
        // Return the asynchronous result from the other Web service.
        return remoteService.EndReturnedStronglyTypedDS(asyncResult);
    }
}
Imports System.Web.Services
<WebService(Namespace:="https://www.contoso.com/")> _
Public Class MyService
    Inherits WebService
    Public remoteService As RemoteService

    Public Sub New()
        MyBase.New()
        ' Create a new instance of proxy class for 
        ' the Web service to be called.
        remoteService = New RemoteService()
    End Sub

    ' Define the Begin method.
    <WebMethod()> _
    Public Function BeginGetAuthorRoyalties(ByVal Author As String, _
    ByVal callback As AsyncCallback, ByVal asyncState As Object) _
        As IAsyncResult
        ' Begin asynchronous communictation with a different XML Web
        ' service.
        Return remoteService.BeginReturnedStronglyTypedDS(Author, _
            callback, asyncState)
    End Function
    ' Define the End method.
    <WebMethod()> _
    Public Function EndGetAuthorRoyalties(ByVal asyncResult As _
        IAsyncResult) As AuthorRoyalties
        ' Return the asynchronous result from the other Web service.
        Return remoteService.EndReturnedStronglyTypedDS(asyncResult)
    End Function
End Class

Vea también

Tareas

Cómo: Encadenar llamadas asincrónicas con un método de servicio Web

Conceptos

Métodos asincrónicos del servicio web XML
Comunicar de forma asincrónica con servicios web XML