Comment : créer des méthodes de service Web asynchrones

Cette rubrique est spécifique à une technologie existante. Les services Web XML et les clients du service Web XML doivent à présent être créés à l'aide de Windows Communication Foundation.

Cette procédure décrit comment convertir une méthode de service Web en méthodes conçues pour l'accès asynchrone. Elle suit le modèle de conception asynchrone de .NET Framework. Le rubrique Méthodes de service Web XML asynchrones explique comment cette procédure fonctionne et comment l'outil Wsdl.exe génère des classes de proxy clientes qui peuvent accéder de façon asynchrone aux méthodes de service Web, même si elles sont conçues pour l'accès synchrone.

Pour implémenter une méthode de service Web asynchrone

  1. Fractionnez une méthode de service Web synchrone en deux méthodes, chacune avec le même nom de base, plus le préfixe Begin pour l'une et le préfixe End pour l'autre.

  2. La liste de paramètres pour la méthode Begin contient tous les paramètres in et by reference pour la fonctionnalité de la méthode plus deux paramètres supplémentaires.

    • Les paramètres By reference sont répertoriés comme des paramètres in.

    • L'avant-dernier paramètre doit être un AsyncCallback. Le paramètre AsyncCallback permet à un client de fournir un délégué, appelé lorsque la méthode s'exécute. Lorsqu'une méthode de service Web asynchrone appelle une autre méthode asynchrone, ce paramètre peut être passé dans l'avant-dernier paramètre pour cette méthode.

    • Le dernier paramètre est un Object. Le paramètre Object permet à un appelant de fournir des informations d'état à la méthode. Lorsqu'une méthode de service Web asynchrone appelle une autre méthode asynchrone, ce paramètre peut être passé dans le dernier paramètre pour cette méthode.

    • La valeur de retour doit être du type IAsyncResult.

  3. La liste de paramètres pour la méthode End se compose d'un IAsyncResult suivi de n'importe quel paramètre in et by reference spécifique à la fonctionnalité de la méthode.

    • La valeur de retour est du même type que la valeur de retour d'une méthode de service Web synchrone.

    • Les paramètres By reference sont répertoriés comme des paramètres out.

Exemple

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

Voir aussi

Tâches

Comment : chaîner des appels asynchrones avec une méthode de service Web

Concepts

Méthodes de service Web XML asynchrones
Communications asynchrones avec les services Web XML