Поделиться через


Как реализовать асинхронный клиент веб-службы с помощью ASP.NET 2.0

Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.

В версии 2.0 платформы .NET Framework прокси-код, создаваемый инструментом Инструмент языка описания веб-служб (Wsdl.exe), поддерживает новую модель event-driven asynchronous programming model. Объединяя модель управляемого событиями асинхронного программирования и автоматическое создание прокси-класса веб-клиентов ASP.NET 2.0, можно быстро строить высокопроизводительные веб-приложения на основе веб-служб.

В разделе Multithreaded Programming with the Event-based Asynchronous Pattern приводятся вводные сведения о новой асинхронной модели программирования, в которой для обработки обратных вызовов используются события, что упрощает создание многопотоковых приложений без необходимости самостоятельной реализации сложного многопотокового кода. Общие сведения о новой управляемой событиями асинхронной модели см. в разделе Event-based Asynchronous Pattern Overview. Подробные сведения о реализациях клиентов с помощью новой модели см. в разделе How to: Implement a Client of the Event-based Asynchronous Pattern.

Клиенты веб-служб, созданные с помощью приложения ASP.NET в версии 2.0 платформы .NET Framework, могут использовать преимущества нового подкаталога App_WebReferences, который может динамически компилировать файл WSDL в прокси-код, когда клиентское приложение ASP.NET вызывает XML-веб-службу, поддерживающую контракт WSDL.

Полный пример см. в учебнике по RADAsync по ссылке ASP.NET Web Services QuickStarts.

Реализация управляемого событиями клиента веб-службы

  1. Создайте XML-веб-службу с синхронным веб-методом, выполняющим требующее много времени действие, которое лучше всего выполнять асинхронно.

    [WebMethod]
    public string HelloWorld() {
      Thread.Sleep(5000);
      return "Hello World";
    }
    
    <WebMethod()> _
    Public Function HelloWorld() As String 
      Thread.Sleep(5000)
    ..Return "Hello World"
    End Function
    
  2. В клиентском приложении ASP.NET добавьте атрибут Async к вашей директиве @ Page и задайте для него значение true, затем используйте директиву @ Import для импорта пространства имен System.Threading.

    <%@ Page Language="C#" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
    <%@ Page Language="VB" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
  3. Чтобы использовать автоматическое создание прокси-класса, создайте файл WSDL (с помощью инструмента Инструмент языка описания веб-служб (Wsdl.exe)) и поместите этот файл в подкаталог App_WebReferences клиента. (Дополнительные сведения см. в разделе ASP.NET Web Site Layout.)

  4. Обычным образом постройте клиента веб-службы, создав новый объект с помощью имени класса службы плюс строка WaitService и присвойте URL-адрес веб-службы свойству Url. Например, в случае имени класса службы HelloWorld клиент создает объект HelloWorldWaitService.

    HelloWorldWaitService service = new HelloWorldWaitService();
    service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/cs/Server/HelloWorldWaitService.asmx";
    
    Dim service As New HelloWorldWaitService()
    service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/vb/Server/HelloWorldWaitService.asmx"
    
  5. В коде клиентского приложения присвойте обработчик событий событию Completed своего прокси-класса. В следующем примере кода клиентская страница ASP.NET имеет метод HelloWorldCompleted, вызываемый при возврате метода веб-службы.

    //Add our callback function to the event handler. 
    service.HelloWorldCompleted += this.HelloWorldCompleted; 
    
    'Add our callback function to the event handler
    AddHandler service.HelloWorldCompleted, AddressOf Me.HelloWorldCompleted
    
  6. В коде клиентского приложения вызовите метод Async для прокси-класса. (Этот метод имеет то же имя, что и веб-метод, но с добавленным текстом "Async". Дополнительные сведения см. в разделе How to: Implement a Client of the Event-based Asynchronous Pattern.) Этот вызов метода появляется на клиентской странице ASP.NET в виде синхронного вызова, но управление возвращается немедленно. Клиентская страница ASP.NET возвращается в браузер только после того, как будет завершен асинхронный вызов, возникнет событие прокси-класса Completed и будет выполнен метод обработчика.

    service.HelloWorldAsync("second call");
    
    service.HelloWorldAsync("second call")
    

См. также

Другие ресурсы

ASP.NET Web Services QuickStarts