Поскольку asp2.0 обеспечивает поддержку асинхронных страниц, производительность асинхронных вызовов WebService значительно улучшилась.
Чтобы использовать асинхронную страницу, необходимо сначала установить Async="true". Асинхронная страница реализуется путем добавления асинхронных методов Begin и End между событиями Prerender и PrerenderComplete. Методы Begin и End принадлежат разным потокам.
Существует два способа реализации асинхронных страниц WS:
1. Используйте метод ожидания для реализации асинхронного общего класса и инкапсуляции WS.
/**//// <сводка>
/// Используйте метод ожидания для реализации асинхронного
/// сводка>
///
/// <возвращается>возвращается>
личный кабинет;
имя пользователя частной строки;
публичный аккаунт Аккаунт
{
получить {возврат аккаунта}
установить {аккаунт = значение};
}
общедоступная строка Имя пользователя
{
получить {вернуть имя пользователя}
установить {имя пользователя = значение};
}
public IAsyncResult BeginAsyncGetAccount (отправитель объекта, EventArgs e, AsyncCallback cb, состояние объекта)
{
return vb.BeginGetAccountbyName(имя пользователя,cb,состояние);
}
public void EndAsyncGetAccount (IAsyncResult ar)
{
учетная запись = vb.EndGetAccountbyName(ar);
}
/**//// <сводка>
/// Использование асинхронного режима, управляемого событиями
/// сводка>
///
public void GetAccountCompleted (источник объекта, VB.GetAccountbyNameCompletedEventArgs e)
{
счет = е.Результат;
}
public void AsGetAccount (строковое имя пользователя)
{
vb.GetAccountbyNameCompleted += новый GetAccountbyNameCompletedEventHandler(GetAccountCompleted);
vb.GetAccountbyNameAsync(имя пользователя)
}Вызов метода
protected void Page_Load (отправитель объекта, EventArgs e)
{
this.PreRenderComplete += новый EventHandler(Page_PreRenderComplete);
b.Имя пользователя = "Динхао";
AddOnPreRenderCompleteAsync(b.BeginAsyncGetAccount, b.EndAsyncGetAccount);
}
protected void Page_PreRenderComplete (отправитель объекта, EventArgs e)
{
//Конец асинхронного вызова
VB.Счет a = b.Счет;
AccountIf ai = новый AccountIf(a);
аис[0] = аи;
GridView1.DataSource = ais;
GridView1.DataBind();
}Поскольку оба делегата AddOnPreRenderCompleteAsync имеют тип Void, атрибуты с возвращаемыми значениями, такие как Account, должны быть добавлены в общий класс для использования основным вызывающим методом. Кроме того, в нем нет информации о параметрах для асинхронных методов. Следует добавить атрибуты параметра, такие как: Имя пользователя.
2. Асинхронный режим, управляемый событиями (новое в версии 2.0)
Метод вызова:
protected void Page_Load (отправитель объекта, EventArgs e)
{
this.PreRenderComplete += новый EventHandler(Page_PreRenderComplete);
b.AsGetAccount("дингхао");
}
protected void Page_PreRenderComplete (отправитель объекта, EventArgs e)
{
//Конец асинхронного вызова
VB.Счет a = b.Счет;
AccountIf ai = новый AccountIf(a);
аис[0] = аи;
GridView1.DataSource = ais;
GridView1.DataBind();
}Этот метод вызова использует событие *Completed, которое срабатывает при завершении *Async. Этот метод вызова может опускать атрибуты учетной записи и имени пользователя, и его относительно просто использовать
http://bluewater.cnblogs.com/archive/2006/. 20.06/430758.html