Практическое руководство. Асинхронный доступ к веб-службе в управляемом коде
Обновлен: Ноябрь 2007
Каждый веб-метод из класса прокси веб-службы имеет асинхронный эквивалент. Для каждого веб-метода класс прокси автоматически создает асинхронный метод и соответствующее событие. При вызове асинхронного метода он выполняется в другом потоке и сигнализирует о своем завершении созданием соответствующего события. Чтобы выполнять код после завершения асинхронного метода, можно создать обработчик соответствующего события.
Чтобы вызвать веб-метод асинхронно в языке Visual Basic, выполните следующие действия:
Объявите экземпляр класса прокси веб-службы XML при помощи ключевого слова WithEvents, как показано ниже:
Dim WithEvents myWebService As New Service1
Примечание.
Проект должен содержать веб-ссылку на веб-службу.
Для создания обработчика события MethodCompleted, которое связано с вызываемым методом, в редакторе кода используйте ключевое слово Handles. Например, если асинхронно вызывается метод с названием "HelloWorld", то созданный метод будет выглядеть приблизительно так:
Private Sub HelloWorldComplete(ByVal sender As Object, _ ByVal completed As localhost.HellowWorldCompletedEventArgs) _ Handles myWebService.HelloWorldCompleted ' Insert code to implement the method here End Sub
Необходимо убедиться, что сигнатура метода, который обрабатывает событие MethodCompleted, соответствует событию. Обычно для этого требуется аргумент Object, который служит для представления отправителя, и экземпляр объекта EventArgs этого метода, который располагается в в том же пространстве имен, что и класс прокси веб-службы. Редактор кода также можно использовать для автоматического создания обработчиков событий. Дополнительные сведения см. в разделе Практическое руководство. Создание обработчиков событий в редакторе кода Visual Basic.
Вызовите веб-метод, используя асинхронную форму метода. Например, если асинхронно вызывается метод с названием "HelloWorld", то вызов будет выглядеть так:
HelloWorldAsync
Следует заметить, что возвращаемое значение метода доступно в свойстве Result объекта EventArgs.
Чтобы вызвать веб-метод асинхронно в языке C#, выполните следующие действия:
Объявите экземпляр класса прокси веб-службы XML, как показано ниже:
private localhost.Service1 myWebService = new localhost.Service1 ();
Примечание.
Проект должен содержать веб-ссылку на веб-службу.
В редакторе кода добавьте обработчик события MethodCompleted, которое связано с методом, который вы хотите вызвать. Например, если асинхронно вызывается метод с названием "HelloWorld", то созданный метод будет выглядеть приблизительно так:
private void HelloWorldCompleted(Object sender, localhost.HelloWorldCompletedEventArgs Completed) { // Insert code to implement the method here }
Необходимо убедиться, что сигнатура метода, который обрабатывает событие MethodCompleted, соответствует событию. Обычно для этого требуется аргумент Object, который служит для представления отправителя, и экземпляр объекта EventArgs этого метода, который располагается в в том же пространстве имен, что и класс прокси веб-службы. Редактор кода также можно использовать для автоматического создания обработчиков событий. Дополнительные сведения см. в разделе Практическое руководство. Подписка и отмена подписки на события (Руководство по программированию в C#).
В конструкторе класса к списку обработчиков этого события следует добавить обработчик событий MethodCompleted, как показано ниже:
private void Form1_Load(object sender, EventArgs e) { myWebService.HelloWorldCompleted += new localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted); }
Вызовите веб-метод, используя асинхронную форму метода. Например, если асинхронно вызывается метод с названием "HelloWorld", то вызов будет выглядеть так:
HelloWorldAsync();
Следует заметить, что возвращаемое значение метода доступно в свойстве Result объекта EventArgs.
См. также
Основные понятия
Communicating with XML Web Services Asynchronously