Comment : implémenter un client de service Web asynchrone à l'aide de la technique d'attente
La technique d'attente est un moyen d'implémenter un client de service Web pour communiquer de façon asynchrone avec une méthode de service Web, même si la méthode est prévue pour un accès synchrone. La technique est expliquée dans la rubrique Communiquer de façon asynchrone avec les services Web XML.
Cet exemple se base sur une classe de service Web PrimeFactorizer avec une méthode Factorize, pour laquelle l'outil Wsdl.exe a généré deux méthodes de proxy clientes asynchrones, BeginFactorize et EndFactorize.
Pour implémenter la technique d'attente
Le client de service Web appelle la méthode Begin de la classe proxy générée.
IAsyncResult ar = pf.BeginFactorize(factorizableNum, null, null);
Dim ar As IAsyncResult = pf.BeginFactorize(factorizableNum, _ Nothing, Nothing)
Le client de service Web accède à un objet WaitHandle via la propriété AsyncWaitHandle du IAsyncResult retourné. Le client appelle l'une des méthodes d'attente de la classe WaitHandle et attend un ou plusieurs objets de synchronisation à signaler.
Si un client utilise cette technique pour appeler une seule méthode de service Web de façon asynchrone, il peut appeler WaitOne pour attendre le traitement complet de cette méthode. D'autres méthodes d'attente sont WaitAny et WaitAll.
ar.AsyncWaitHandle.WaitOne();
ar.AsyncWaitHandle.WaitOne()
Lorsque la méthode d'attente est retournée, le client appelle la méthode End pour obtenir les résultats.
results = pf.EndFactorize(ar);
results = pf.EndFactorize(ar)
Exemple
// -----------------------------------------------------------------------// Async Variation 2.
// Asynchronously invoke the Factorize method,
//without specifying a call back.
using System;
using System.Runtime.Remoting.Messaging;
// MyFactorize, is the name of the namespace in which the proxy class is
// a member of for this sample.
using MyFactorize;
class TestCallback
{
public static void Main(){
long factorizableNum = 12345;
PrimeFactorizer pf = new PrimeFactorizer();
// Begin the Async call to Factorize.
IAsyncResult ar = pf.BeginFactorize(factorizableNum, null, null);
// Wait for the asynchronous operation to complete.
ar.AsyncWaitHandle.WaitOne();
// Get the completed results.
long[] results;
results = pf.EndFactorize(ar);
//Output the results.
Console.Write("12345 factors into: ");
int j;
for (j = 0; j<results.Length;j++){
if (j == results.Length - 1)
Console.WriteLine(results[j]);
else
Console.Write(results[j] + ", ");
}
}
}
Imports System
Imports System.Runtime.Remoting.Messaging
Imports MyFactorize ' Proxy class namespace
Public Class TestCallback
Public Shared Sub Main()
Dim factorizableNum As Long = 12345
Dim pf As PrimeFactorizer = new PrimeFactorizer()
' Begin the Async call to Factorize.
Dim ar As IAsyncResult = pf.BeginFactorize(factorizableNum, Nothing, Nothing)
' Wait for the asynchronous operation to complete.
ar.AsyncWaitHandle.WaitOne()
' Get the completed results.
Dim results() as Long
results = pf.EndFactorize(ar)
'Output the results.
Console.Write("12345 factors into: ")
Dim j as Integer
For j = 0 To results.Length - 1
If j = (results.Length - 1) Then
Console.WriteLine(results(j) )
Else
Console.Write(results(j).ToString + ", ")
End If
Next j
End Sub
End Class
Voir aussi
Tâches
Comment : implémenter un client de service Web asynchrone à l'aide de la technique de rappel
Comment : procéder à un appel asynchrone d'un client de service Web
Concepts
Communications asynchrones avec les services Web XML
Création de clients de service Web XML
Autres ressources
Création de clients pour les services Web XML
Copyright ©2007 par Microsoft Corporation. Tous droits réservés.