เนื่องจาก asp2.0 ให้การสนับสนุนเพจแบบอะซิงโครนัส ประสิทธิภาพของการเรียก WebService แบบอะซิงโครนัสจึงได้รับการปรับปรุงอย่างแท้จริง
หากต้องการใช้เพจแบบอะซิงโครนัส คุณต้องตั้งค่า Async="true" ก่อน เพจแบบอะซิงโครนัสจะถูกนำไปใช้โดยการเพิ่มวิธีเริ่มต้นและสิ้นสุดแบบอะซิงโครนัสระหว่างเหตุการณ์ Prerender และ PrerenderComplete วิธีการ Begin และ End เป็นของเธรดที่แตกต่างกัน
มีสองวิธีในการใช้เพจอะซิงโครนัส WS:
1. ใช้วิธีการรอเพื่อใช้คลาสทั่วไปแบบอะซิงโครนัสและห่อหุ้ม WS
/***////// <สรุป>
/// ใช้วิธีการรอเพื่อใช้แบบอะซิงโครนัส
/// </สรุป>
/// <ชื่อพารามิเตอร์ = "ชื่อ" ></ พารามิเตอร์>
/// <ส่งคืน></ส่งคืน>
บัญชีบัญชีส่วนตัว
ชื่อผู้ใช้สตริงส่วนตัว
บัญชีสาธารณะ บัญชี
-
รับ { บัญชีคืน;
ตั้งค่า { บัญชี = มูลค่า }
-
ชื่อผู้ใช้สตริงสาธารณะ
-
รับ { ส่งคืนชื่อผู้ใช้ }
ตั้งค่า { ชื่อผู้ใช้ = ค่า }
-
IAsyncResult สาธารณะ BeginAsyncGetAccount (ผู้ส่งวัตถุ, EventArgs e, AsyncCallback cb, สถานะของวัตถุ)
-
กลับ vb.BeginGetAccountbyName(ชื่อผู้ใช้,cb,สถานะ);
-
โมฆะสาธารณะ EndAsyncGetAccount (IAsyncResult ar)
-
บัญชี = vb.EndGetAccountbyName(ar);
}
/**//// <สรุป>
/// ใช้อะซิงโครนัสที่ขับเคลื่อนด้วยเหตุการณ์
/// </สรุป>
/// <ชื่อพารามิเตอร์ = "ชื่อผู้ใช้" ></ พารามิเตอร์>
โมฆะสาธารณะ GetAccountCompleted (แหล่งที่มาของวัตถุ, VB.GetAccountbyNameCompletedEventArgs e)
-
บัญชี = e.ผลลัพธ์;
-
โมฆะสาธารณะ AsGetAccount (ชื่อผู้ใช้สตริง)
-
vb.GetAccountbyNameCompleted += GetAccountbyNameCompletedEventHandler ใหม่ (GetAccountCompleted);
vb.GetAccountbyNameAsync(ชื่อผู้ใช้)
}วิธีการโทร
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
this.PreRenderComplete += ใหม่ EventHandler (Page_PreRenderComplete);
b.ชื่อผู้ใช้ = "dinghao";
AddOnPreRenderCompleteAsync(b.BeginAsyncGetAccount, b.EndAsyncGetAccount);
-
โมฆะที่ได้รับการป้องกัน Page_PreRenderComplete (ผู้ส่งวัตถุ EventArgs e)
-
//สิ้นสุดการโทรแบบอะซิงโครนัส
VB.บัญชี a = b.บัญชี;
AccountIf ai = ใหม่ AccountIf(a);
เอไอเอส[0] = ไอ;
GridView1.DataSource = เอไอเอส;
GridView1.DataBind();
เนื่องจากผู้รับมอบสิทธิ์ทั้งสองของ AddOnPreRenderCompleteAsync เป็นประเภท Void ทั้งคู่ จึงควรเพิ่มแอตทริบิวต์ที่มีค่าส่งคืน เช่น Account ลงในคลาสทั่วไปเพื่อใช้โดยวิธีการเรียกหลัก นอกจากนี้ ไม่มีข้อมูลพารามิเตอร์สำหรับวิธีการแบบอะซิงโครนัสใน ผู้รับมอบสิทธิ์ ควรเพิ่มแอตทริบิวต์พารามิเตอร์ เช่น ชื่อผู้ใช้
2. อะซิงโครนัสที่ขับเคลื่อนด้วยเหตุการณ์ (ใหม่ใน 2.0)
วิธีการโทร:
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
this.PreRenderComplete += ใหม่ EventHandler (Page_PreRenderComplete);
b.AsGetAccount("dinghao");
-
โมฆะที่ได้รับการป้องกัน Page_PreRenderComplete (ผู้ส่งวัตถุ EventArgs e)
-
//สิ้นสุดการโทรแบบอะซิงโครนัส
VB.บัญชี a = b.บัญชี;
AccountIf ai = ใหม่ AccountIf(a);
เอไอเอส[0] = ไอ;
GridView1.DataSource = เอไอเอส;
GridView1.DataBind();
}วิธีการเรียกนี้ใช้เหตุการณ์ *Completed ซึ่งจะถูกทริกเกอร์เมื่อ *Async เสร็จสมบูรณ์ วิธีการเรียกนี้สามารถละเว้นแอตทริบิวต์บัญชีและชื่อผู้ใช้ได้ และค่อนข้างใช้งานง่าย
http://bluewater.cnblogs.com/archive/2006/ 06/20/430758.html