Partager via


Comment : implémenter un client de service Web asynchrone axé sur les événements à l'aide d'ASP.NET 2.0

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.

Dans la version 2.0 du .NET Framework, le code proxy généré par Outil Web Services Description Language Tool (Wsdl.exe) prend en charge le nouveau event-driven asynchronous programming model. En combinant le modèle de programmation asynchrone événementielle et la génération automatique de proxy de clients Web ASP.NET 2.0, vous pouvez créer rapidement des applications Web hautes performances basées sur les service Web.

Multithreaded Programming with the Event-based Asynchronous Pattern introduit un nouveau modèle de programmation asynchrone qui utilise les événements pour gérer des rappels, facilitant ainsi la création d'applications multithread sans nécessité d'implémenter soi-même le code multithread complexe. Pour une vue d'ensemble du nouveau modèle asynchrone événementiel, consultez Event-based Asynchronous Pattern Overview. Pour plus d'informations sur les implémentations clientes à l'aide du nouveau modèle, consultez How to: Implement a Client of the Event-based Asynchronous Pattern.

Les clients de service Web construits à l'aide de l'application ASP.NET dans la version 2.0 du .NET Framework peuvent tirer parti du nouveau sous-répertoire App_WebReferences, capable de compiler dynamiquement un fichier WSDL dans le code proxy lorsque l'application ASP.NET cliente appelle un service Web XML qui prend en charge le contrat WSDL.

Pour l'exemple complet, consultez le démarrage rapide RADAsync sur ASP.NET Web Services QuickStarts.

Implémentation d'un client de service Web événementiel

  1. Créez un service Web XML avec une méthode Web synchrone dont le comportement prenant beaucoup de temps doit de préférence être exécuté de façon asynchrone.

    [WebMethod]
    public string HelloWorld() {
      Thread.Sleep(5000);
      return "Hello World";
    }
    
    <WebMethod()> _
    Public Function HelloWorld() As String 
      Thread.Sleep(5000)
    ..Return "Hello World"
    End Function
    
  2. Dans l'application ASP.NET cliente, ajoutez l'attribut Async à votre directive @ Page, affectez-lui la valeur trueet utilisez la directive @ Import pour importer l'espace de noms System.Threading.

    <%@ Page Language="C#" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
    <%@ Page Language="VB" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
  3. Pour utiliser la génération de proxy automatique, générez un fichier WSDL (à l'aide du Outil Web Services Description Language Tool (Wsdl.exe)) et placez le fichier dans le sous-répertoire App_WebReferences client. Pour plus d'informations, consultez ASP.NET Web Site Layout.

  4. Générez l'application cliente de service Web normalement en créant un objet à l'aide du nom de classe de service plus la chaîne WaitService et assignez l'URL de service Web à la propriété Url. Par exemple, si le nom de classe de service est HelloWorld, votre client crée un objet HelloWorldWaitService.

    HelloWorldWaitService service = new HelloWorldWaitService();
    service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/cs/Server/HelloWorldWaitService.asmx";
    
    Dim service As New HelloWorldWaitService()
    service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/vb/Server/HelloWorldWaitService.asmx"
    
  5. Dans le code de l'application cliente, assignez un gestionnaire d'événements à l'événement Completed de votre proxy. Dans l'exemple de code suivant, la page ASP.NET cliente a une méthode HelloWorldCompleted qui est appelée lorsque la méthode de service Web est retournée.

    //Add our callback function to the event handler. 
    service.HelloWorldCompleted += this.HelloWorldCompleted; 
    
    'Add our callback function to the event handler
    AddHandler service.HelloWorldCompleted, AddressOf Me.HelloWorldCompleted
    
  6. Dans le code de l'application cliente, appelez la méthode Async sur le proxy. (Cette méthode a le même nom que la méthode Web mais avec "Async" en plus. Pour plus d'informations, consultez How to: Implement a Client of the Event-based Asynchronous Pattern.) Cet appel de méthode apparaît comme un appel synchrone dans la page ASP.NET cliente, mais il est retourné immédiatement. La page ASP.NET cliente n'est pas retournée au navigateur tant que l'appel asynchrone n'est pas terminé, l'événement Completed du proxy est déclenché et la méthode de gestionnaire exécutée.

    service.HelloWorldAsync("second call");
    
    service.HelloWorldAsync("second call")
    

Voir aussi

Autres ressources

ASP.NET Web Services QuickStarts