Gewusst wie: Implementieren eines asynchronen Webdienstclients mithilfe der Wait-Technik
Die Wait-Technik ist eine Möglichkeit zum Implementieren eines Webdienstclients, der asynchron mit einer Webdienstmethode kommuniziert, obwohl die Methode möglicherweise für den synchronen Zugriff gedacht ist. Die Technik wird im Thema "Asynchrones Kommunizieren mit XML-Webdiensten" erklärt.
Dieses Beispiel basiert auf der PrimeFactorizer-Webdienstklasse mit der Factorize-Methode, für die das Tool Wsdl.exe die beiden asynchronen Clientproxymethoden BeginFactorize und EndFactorize generiert hat.
So implementieren Sie die Wait-Technik
Der Webdienstclient ruft die Begin-Methode der generierten Proxyklasse auf.
IAsyncResult ar = pf.BeginFactorize(factorizableNum, null, null);
Dim ar As IAsyncResult = pf.BeginFactorize(factorizableNum, _ Nothing, Nothing)
Der Webdienstclient greift über die AsyncWaitHandle-Eigenschaft des zurückgegebenen IAsyncResult auf ein WaitHandle-Objekt zu. Der Client ruft eine der WaitHandle-Wait-Methoden der Klasse auf und wartet auf die Signalisierung mindestens eines Synchronisierungsobjekts.
Wenn ein Client diese Technik zum Aufrufen einer einzigen Webdienstmethode verwendet, kann er WaitOne aufrufen, um auf das Verarbeitungsende dieser Methode zu warten. Weitere Wait-Methoden sind WaitAny und WaitAll.
ar.AsyncWaitHandle.WaitOne();
ar.AsyncWaitHandle.WaitOne()
Wenn die Wait-Methode zurückgegeben wird, ruft der Client die End-Methode auf, um die Ergebnisse abzurufen.
results = pf.EndFactorize(ar);
results = pf.EndFactorize(ar)
Beispiel
// -----------------------------------------------------------------------// 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
Siehe auch
Aufgaben
Gewusst wie: Implementieren eines asynchronen Webdienstclients mithilfe der Rückruftechnik
Gewusst wie: Ausführen eines asynchronen Aufrufs von einem Webdienstclient
Konzepte
Asynchrones Kommunizieren mit XML-Webdiensten
Erstellen von XML-Webdienstclients
Weitere Ressourcen
Erstellen von Clients für XML-Webdienste
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.