Share via


Vorgehensweise: Erstellen asynchroner Webdienstmethoden

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

In dieser Vorgehensweise wird beschrieben, wie Sie eine Webdienstmethode in ein Methodenpaar für asynchronen Zugriff konvertieren. Sie entspricht dem asynchronen Entwurfsmuster von .NET Framework. Im Thema Asynchrone XML-Webdienstmethoden wird erklärt, wie diese Prozedur funktioniert und wie das Tool Wsdl.exe Clientproxyklassen generiert, die asynchron auf Webdienstmethoden zugreifen können, selbst wenn sie für einen synchronen Zugriff konzipiert sind.

So implementieren Sie eine asynchrone Webdienstmethode

  1. Teilen Sie eine synchrone Webdienstmethode in zwei Methoden mit jeweils dem gleichen Basisnamen, wobei die eine mit Begin und die andere mit End beginnt.

  2. Die Parameterliste für die Begin-Methode enthält alle in-Parameter und by reference-Parameter für die Funktionalität der Methode sowie zwei zusätzliche Parameter.

    • By reference-Parameter werden als in-Parameter aufgelistet.

    • Der zweitletzte Parameter muss ein AsyncCallback-Parameter sein. Der AsyncCallback-Parameter ermöglicht es einem Client, einen Delegaten anzugeben, der bei Abschluss der Methode aufgerufen wird. Wenn eine asynchrone Webdienstmethode eine weitere asynchrone Methode aufruft, kann dieser Parameter an den zweitletzten Parameter für diese Methode übergeben werden.

    • Der letzte Parameter ist ein Object-Parameter Der Object-Parameter ermöglicht es einem Aufrufer, Zustandsinformationen zur Methode anzugeben. Wenn eine asynchrone Webdienstmethode eine weitere asynchrone Methode aufruft, kann dieser Parameter an den letzten Parameter für diese Methode übergeben werden.

    • Der Rückgabewert muss den Typ IAsyncResult aufweisen.

  3. Die Parameterliste für die End-Methode besteht aus IAsyncResult, gefolgt von out-Parametern und by reference-Parametern, die für die Funktionalität der Methode spezifisch sind.

    • Der Rückgabewert ist der gleiche Typ wie der Rückgabewert einer synchronen Webdienstmethode.

    • By reference-Parameter werden als out-Parameter aufgelistet.

Beispiel

using System;
using System.Web.Services;

[WebService(Namespace="https://www.contoso.com/")]
public class MyService : WebService 
{
    public RemoteService remoteService;
    public MyService() 
    {
        // Create a new instance of proxy class for 
        // the Web service to be called.
        remoteService = new RemoteService();
    }
    // Define the Begin method.
    [WebMethod]
    public IAsyncResult BeginGetAuthorRoyalties(String Author,
        AsyncCallback callback, object asyncState) 
    {
        // Begin asynchronous communictation with a different XML Web
        // service.
        return remoteService.BeginReturnedStronglyTypedDS(Author,
            callback,asyncState);
    }
    // Define the End method.
    [WebMethod]
    public AuthorRoyalties EndGetAuthorRoyalties(IAsyncResult
        asyncResult) 
    {
        // Return the asynchronous result from the other Web service.
        return remoteService.EndReturnedStronglyTypedDS(asyncResult);
    }
}
Imports System.Web.Services
<WebService(Namespace:="https://www.contoso.com/")> _
Public Class MyService
    Inherits WebService
    Public remoteService As RemoteService

    Public Sub New()
        MyBase.New()
        ' Create a new instance of proxy class for 
        ' the Web service to be called.
        remoteService = New RemoteService()
    End Sub

    ' Define the Begin method.
    <WebMethod()> _
    Public Function BeginGetAuthorRoyalties(ByVal Author As String, _
    ByVal callback As AsyncCallback, ByVal asyncState As Object) _
        As IAsyncResult
        ' Begin asynchronous communictation with a different XML Web
        ' service.
        Return remoteService.BeginReturnedStronglyTypedDS(Author, _
            callback, asyncState)
    End Function
    ' Define the End method.
    <WebMethod()> _
    Public Function EndGetAuthorRoyalties(ByVal asyncResult As _
        IAsyncResult) As AuthorRoyalties
        ' Return the asynchronous result from the other Web service.
        Return remoteService.EndReturnedStronglyTypedDS(asyncResult)
    End Function
End Class

Siehe auch

Aufgaben

Vorgehensweise: Verketten von asynchronen Aufrufen mit einer Webdienstmethode

Konzepte

Asynchrone XML-Webdienstmethoden
Asynchrones Kommunizieren mit XML-Webdiensten