编程教程
您现在的位置: 中国个人站长站 >> 网络编程 >> ASP.NET教程 >> 教程正文 [收藏]Matt Powell的《Server-Side 异步Web Methhods》
推荐位

[收藏]Matt Powell的《Server-Side 异步Web Methhods》

中国个人站长站 ASP.NET教程 点击数: 更新时间:2007-7-21 5:36:15
ce(添加 Web 引用)向导生成的代码。但结果是相同的,即释放线程以使其能够执行其他进程。

  ASMX 处理程序调用服务器的 BeginXXX 函数后,会将线程返回到进程线程池,使之能够处理接收到的任何其他请求。但是,还不能释放请求的 HttpContext。ASMX 处理程序将等待,直到它传递给 BeginXXX 函数的回调函数被调用,它才结束处理请求。

  一旦回调函数被调用,ASMX 处理程序将调用 EndXXX 函数,使您的 Web 方法可以完成任何所要执行的处理,并且可以得到被序列化到 SOAP 响应中的返回数据。EndXXX 函数返回后将发送响应,只有此时该请求的 HttpContext 才得到释放。

 

简单的异步 Web 方法

  为举例说明异步 Web 方法,我从一个名为 LengthyProcedure 的简单同步 Web 方法开始,其代码如下所示。然后我们再看一看如何异步完成相同的任务。LengthyProcedure 只占用给定的毫秒数。

[WebService]
public class SyncWebService : System.Web.Services.WebService
{
  [WebMethod]
  public string LengthyProcedure(int milliseconds)
  {
    System.Threading.Thread.Sleep(milliseconds);
    return "成功";
  }
}


  现在我们将 LengthyProcedure 转换为异步 Web 方法。我们必须创建如前所述的 BeginLengthyProcedure 函数和 EndLengthyProcedure 函数。请记住,我们的 BeginLengthyProcedure 调用需要返回一个 IAsyncResult 接口。这里,我打算使用一个委托以及该委托上的 BeginInvoke 方法,让我们的 BeginLengthyProcedure 调用进行异步方法调用。传递到 BeginLengthyProcedure 的回调函数将被传递到委托上的 BeginInvoke 方法,从 BeginInvoke 返回的 IAsyncResult 将被 BeginLengthyProcedure 方法返回。

  当委托完成时,将调用 EndLengthyProcedure 方法。我们将调用委托上的 EndInvoke 方法,以传入 IAsyncResult,并将其作为 EndLengthyProcedure 调用的输入。返回的字符串将是从该 Web 方法返回的字符串。下面是其代码:


[WebService]
public class AsyncWebService : System.Web.Services.WebService
{
  public delegate string LengthyProcedureAsyncStub(
    int milliseconds);

  public string LengthyProcedure(int milliseconds)
  {
    System.Threading.Thread.Sleep(milliseconds);
    return "成功";
  }

  public class MyState
  {
    public object previousState;
    public LengthyProcedureAsyncStub asyncStub;
  }

  [ System.Web.Services.WebMethod ]
  public IAsyncResult BeginLengthyProcedure(int milliseconds,
    AsyncCallback cb, object s)
  {
    LengthyProcedureAsyncStub stub
      = new LengthyProcedureAsyncStub(LengthyProcedure);
    MyState ms = new MyState();
    ms.previousState = s;
    ms.asyncStub = stub;
    return stub.BeginInvoke(milliseconds, cb, ms);
  }

  [ System.Web.Services.WebMethod ]
  public string EndLengthyProcedure(IAsyncResult call)
  {
    MyState ms = (MyState)call.

上一页  [1] [2] [3] [4] [5] 下一页

教程录入:swh    责任编辑:swh 
个人站长站与你风雨同舟!
本站所提供的资源均来源于互联网,如有侵权行为,请与本站管理员联系,我们会第一时间删除!
·如果您发现《[收藏]Matt Powell的《Server-Side 异步Web Methhods》》文章有错误,也请通知我们修改!
联系邮箱chinageren#126.com,谢谢支持!
站内搜索:
广告服务 | 友情链接 | 联系我们 | 免责声明 | 用户留言 | 网站导航
版权所有:中国个人站长站 2007-2008 未经授权禁止复制或建立镜像 客服QQ号:112731235
copyright © 2007-2008 www.ChinaGeRen.com online services. all rights reserved. 苏ICP备05000059号