Практическое руководство. Создание асинхронных методов веб-службы
Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.
Эта процедура описывает преобразование метода веб-службы в пару методов, предназначенных для асинхронного доступа. Она следует принципам разработки асинхронной связи .NET Framework. В разделе Асинхронные методы XML-веб-служб разъясняется принцип действия этой процедуры, а также создания программой Wsdl.exe клиентских прокси-классов с возможностью асинхронного доступа к методам веб-службы, даже если они предназначены для синхронного доступа.
Реализация асинхронного метода веб-службы
Разделите синхронный метод веб-службы на два метода с одинаковым базовым именем, у одного из которых имя начинается со слова Begin, а у другого — End.
Список параметров для метода Begin содержит все параметры "in" и "by reference" для функциональных возможностей метода, а также два дополнительных параметра.
Параметры by reference указаны как параметры in.
Предпоследним параметром должен быть AsyncCallback. Параметр AsyncCallback позволяет клиенту предоставить делегат, вызываемый по завершении метода. Когда асинхронный метод веб-службы вызывает другой асинхронный метод, этот параметр можно передать предпоследнему параметру этого метода.
Последний параметр — Object. Параметр Object позволяет вызвавшему объекту предоставить методу информацию о состоянии. Когда асинхронный метод веб-службы вызывает другой асинхронный метод, этот параметр можно передать последнему параметру этого метода.
Возвращаемое значение должно принадлежать к типу IAsyncResult.
Список параметров метода End содержит IAsyncResult и параметры out и by reference, зависимые от функциональных возможностей метода.
Возвращаемое значение принадлежит к тому же типу, что и возвращаемое значение синхронного метода веб-службы.
Параметры by reference указаны как параметры out.
Пример
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
См. также
Задачи
Как увязывать асинхронные вызовы с помощью метода веб-службы
Основные понятия
Асинхронные методы XML-веб-служб
Асинхронное взаимодействие с XML-веб-службами