نظرًا لأن asp2.0 يوفر دعمًا للصفحات غير المتزامنة، فقد تم تحسين أداء الاستدعاءات غير المتزامنة إلى WebService حقًا.
لاستخدام صفحة غير متزامنة، يجب عليك أولاً تعيين Async = "true". يتم تنفيذ الصفحة غير المتزامنة عن طريق إضافة أساليب البداية والنهاية غير المتزامنة بين حدثي Prerender وPrerenderComplete. تنتمي أساليب Begin وEnd إلى سلاسل عمليات مختلفة.
هناك طريقتان لتنفيذ صفحات WS غير المتزامنة:
1. استخدم طريقة الانتظار لتنفيذ فئة عامة غير متزامنة وتغليف WS
/**//// <الملخص>
/// استخدم طريقة الانتظار لتنفيذ غير متزامن
/// </الملخص>
/// <param name="name"></param>
/// <returns></returns>
حساب حساب خاص؛
اسم مستخدم سلسلة خاصة؛
حساب الحساب العام
{
الحصول على {حساب العودة}
تعيين {الحساب = القيمة}
}
اسم مستخدم السلسلة العامة
{
الحصول على { عودة اسم المستخدم }
تعيين { اسم المستخدم = القيمة }
}
IAsyncResult العامة BeginAsyncGetAccount (مرسل الكائن، EventArgs e، AsyncCallback cb، حالة الكائن)
{
return vb.BeginGetAccountbyName(username,cb,state);
}
الفراغ العام EndAsyncGetAccount(IAsyncResult ar)
{
account = vb.EndGetAccountbyName(ar);
}
/**//// <summary>
/// استخدم غير متزامن يحركه الحدث
/// </الملخص>
/// <param name="username"></param>
الفراغ العام GetAccountCompleted (مصدر الكائن، VB.GetAccountbyNameCompletedEventArgs e)
{
الحساب = النتيجة الإلكترونية؛
}
الفراغ العام AsGetAccount (اسم مستخدم السلسلة)
{
vb.GetAccountbyNameCompleted += new GetAccountbyNameCompletedEventHandler(GetAccountCompleted);
vb.GetAccountbyNameAsync(اسم المستخدم)
}طريقة الاتصال
Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
{
this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);
b.Username = "dinghao";
AddOnPreRenderCompleteAsync(b.BeginAsyncGetAccount, b.EndAsyncGetAccount);
}
Page_PreRenderComplete باطلة محمية (مرسل الكائن، EventArgs e)
{
// نهاية المكالمة غير المتزامنة
VB.Account a = b.Account;
AccountIf ai = new AccountIf(a);
ais[0] = ai;
GridView1.DataSource = ais;
GridView1.DataBind();
}نظرًا لأن مندوبي AddOnPreRenderCompleteAsync كلاهما من النوع Void، فيجب إضافة السمات ذات قيم الإرجاع مثل الحساب إلى الفئة العامة لاستخدامها بواسطة طريقة الاتصال الرئيسية، بالإضافة إلى ذلك، لا توجد معلومات معلمات للطرق غير المتزامنة يجب إضافة سمات المعلمة مثل: اسم المستخدم
2. غير متزامن يحركه الحدث (جديد في 2.0)
طريقة الاتصال:
Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
{
this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);
b.AsGetAccount("dinghao");
}
Page_PreRenderComplete باطلة محمية (مرسل الكائن، EventArgs e)
{
// نهاية المكالمة غير المتزامنة
VB.Account a = b.Account;
AccountIf ai = new AccountIf(a);
ais[0] = ai;
GridView1.DataSource = ais;
GridView1.DataBind();
}تستخدم طريقة الاتصال هذه الحدث *Completed، الذي يتم تشغيله عند اكتمال *Async. يمكن أن تحذف طريقة الاتصال هذه سمات الحساب واسم المستخدم، وهي سهلة الاستخدام نسبيًا
http://bluewater.cnblogs.com/archive/2006/. 06/20/430758.html