===WebService ===
using System.Threading;
/// <summary>
///YiBuDiaoYongWebService 的摘要说明/// </summary>[WebService(Namespace = "")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService]public class YiBuDiaoYongWebService : System.Web.Services.WebService {public YiBuDiaoYongWebService () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent(); }[WebMethod]
public string HelloWorld1() { Thread.Sleep(2000); //停留2秒. return "页面异步调用webservice成功!"; }}
===Web页面 ===
<form id="form1" runat="server">
<div> <br /> <asp:Button ID="BeginEndCallBackButton" runat="server" Text="Begin/End 模式回调技术" οnclick="BeginEndCallBackButton_Click" /> <br /> <br /> <asp:Button ID="BeginEndWaitButton" runat="server" Text="Begin/End 模式等待技术" οnclick="BeginEndWaitButton_Click" /> <br /> <br /> <asp:Button ID="EventDriveButton" runat="server" Text="事件驱动的异步模式" οnclick="EventDriveButton_Click" /> </div> </form>
using System.Threading;
using LocalService;//web引用名public partial class WebYiBuDiaoYongWebService : System.Web.UI.Page
{ protected void Page_Load(object sender, EventArgs e) { }/**/
/// <summary> /// 第一种方式:使用 Begin/End 模式的回调技术 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void BeginEndCallBackButton_Click(object sender, EventArgs e) { Response.Write("Begin/End 模式的回调技术<BR>"); LocalService.YiBuDiaoYongWebService localService = new LocalService.YiBuDiaoYongWebService(); //创建代理类对象。 Response.Write(string.Format("开始调用时间:{0}<Br>", DateTime.Now.ToString("mm:ss.ffff")));//开始调用事件 IAsyncResult ar = localService.BeginHelloWorld1(helloWorldCallBack, localService); Response.Write(string.Format("调用结束时间:{0}<Br>", DateTime.Now.ToString("mm:ss.ffff"))); while (!ar.IsCompleted) { }//空循环等待完成 } private void helloWorldCallBack(IAsyncResult ar) { LocalService.YiBuDiaoYongWebService ws = (LocalService.YiBuDiaoYongWebService)ar.AsyncState; string result = ws.EndHelloWorld1(ar); Response.Write(string.Format("完成时间:{0}。 结果{1}<Br>", DateTime.Now.ToString("mm:ss.ffff"), result)); }/**/
/// <summary> /// 第二种方式:使用 Begin/End 模式的等待技术 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void BeginEndWaitButton_Click(object sender, EventArgs e) { LocalService.YiBuDiaoYongWebService localService = new LocalService.YiBuDiaoYongWebService(); //创建代理类对象。 Response.Write("Begin/End 模式的等待技术<BR>"); Response.Write(string.Format("开始调用时间:{0}<Br>", DateTime.Now.ToString("mm:ss.ffff")));//开始调用事件 IAsyncResult ar = localService.BeginHelloWorld1(s => { }, null); Response.Write(string.Format("调用结束时间:{0}<Br>", DateTime.Now.ToString("mm:ss.ffff"))); ar.AsyncWaitHandle.WaitOne(); string result = localService.EndHelloWorld1(ar); Response.Write(string.Format("完成时间:{0}。 结果{1}<Br>", DateTime.Now.ToString("mm:ss.ffff"), result)); }/** <summary>
/// 第三种方式:事件驱动的异步模式的异步 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void EventDriveButton_Click(object sender, EventArgs e) { Response.Write("事件驱动的异步模式的异步 <BR>"); LocalService.YiBuDiaoYongWebService localService = new LocalService.YiBuDiaoYongWebService(); //创建代理类对象。 localService.HelloWorld1Completed += new LocalService.HelloWorld1CompletedEventHandler((o, a) => { Response.Write(string.Format("完成时间:{0}。 结果{1}<Br>", DateTime.Now.ToString("mm:ss.ffff"), a.Result)); });//创建事件。写结果与运行事件 Response.Write(string.Format("开始调用时间:{0}<Br>", DateTime.Now.ToString("mm:ss.ffff")));//开始调用事件 localService.HelloWorld1Async();//异步调用 Response.Write(string.Format("调用结束时间:{0}<Br>", DateTime.Now.ToString("mm:ss.ffff"))); Thread.Sleep(4000);//等待异步操作完成 }}
此內容中不允許非同步作業。啟動非同步作業的網頁必須將 Async 屬性設定為 true,而且只能在 PreRenderComplete 事件之前啟動非同步作業。
於 System.Web.AspNetSynchronizationContext.OperationStarted() 於 System.Net.WebClient.OpenWriteAsync(Uri address, String method, Object userToken) 於 System.Net.WebClient.OpenWriteAsync(Uri address)
原來是要在.aspx 第一行加上一屬性敘述..
Async="true"
使得第一行如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Async="true" Inherits="TestASPXUploader._Default" %>