Procedura: Implementare un client di servizio Web asincrono tramite la tecnica Wait
La tecnica wait costituisce un modo per implementare un client di servizio Web per comunicare in modo asincrono con un metodo di servizio Web, anche se il metodo può essere pensato per un accesso sincrono. La tecnica viene spiegata nell'argomento Comunicazione asincrona con i servizi Web XML.
Questo esempio è basato su una classe di servizio Web PrimeFactorizer con un metodo Factorizeper il quale lo strumento Wsdl.exe ha generato due metodi del proxy client asincroni, BeginFactorize e EndFactorize.
Per implementare la tecnica wait
Il servizio Web esegue la chiamata al metodo Begin della classe proxy generata.
IAsyncResult ar = pf.BeginFactorize(factorizableNum, null, null);
Dim ar As IAsyncResult = pf.BeginFactorize(factorizableNum, _ Nothing, Nothing)
Il client del servizio Web accede a un oggetto WaitHandle tramite la proprietà AsyncWaitHandle del valore restituito di IAsyncResult. Il client esegue la chiamata a uno dei metodi wait WaitHandle della classe e attende la segnalazione da parte di uno o più oggetti di sincronizzazione.
Se la tecnica viene utilizzata da un client esclusivamente per eseguire chiamate in modo asincrono a un metodo di servizio Web, il client può eseguire la chiamata a WaitOne per rimanere in attesa del completamento dell'elaborazione del metodo. Gli altri metodi wait sono WaitAny e WaitAll.
ar.AsyncWaitHandle.WaitOne();
ar.AsyncWaitHandle.WaitOne()
Una volta che il metodo wait restituisce i risultati, il client esegue la chiamata al metodo End per poterli ottenere.
results = pf.EndFactorize(ar);
results = pf.EndFactorize(ar)
Esempio
// -----------------------------------------------------------------------// 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
Vedere anche
Attività
Procedura: Implementare un client di servizio Web asincrono tramite la tecnica di callback
Procedura: Eseguire una chiamata asincrona da un client di servizio Web
Concetti
Comunicazione asincrona con i servizi Web XML
Creazione di client dei servizi Web XML
Altre risorse
Creazione di client di servizi Web XML
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.