Freigeben über


Vorgehensweise: Implementieren eines asynchronen Webdienstclients mithilfe der Wait-Technik

Dieses Thema bezieht sich auf eine veraltete Technologie. XML-Webdienste und XML-Webdienstclients sollten nun mithilfe der folgenden Technologie erstellt werden: Windows Communication Foundation.

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

  1. 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)
    
  2. 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()
    
  3. 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

Vorgehensweise: Implementieren eines asynchronen Webdienstclients mithilfe der Rückruftechnik
Vorgehensweise: 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