我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 操作系统 > 服务器 > WEB相关 > 服务器端异步Web方法(二)
热门文章排行
热门文章排行 启动与关闭服务器(12-28)
服务器应用:用serv-u建立FTP一(11-16)
破解局域网内不能互访的六大经典问题(12-28)
Windows中IIS内FTP服务器高级配置(11-16)
怎样设置域名的DNS服务器(11-16)
精采文章排行
精采文章排行 在Windows Server 2003中为Web站点(11-16)
IP基础--DNS协定(11-16)
怎样设置域名的DNS服务器(11-16)
DNS—bind安装与配置的关键技术揭秘(11-16)
Exchange Server 服务器通讯端口(11-16)
技术专题推荐
网管论坛交流
 

服务器端异步Web方法(二) 

作者:   来源:Linux 宝库   点击:   日期:2006-11-22


-->


  简单的异步 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.AsyncState;
  
      return ms.asyncStub.EndInvoke(call);
  
    }
  
  }







文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·Win2003下Exchange2003安装全图解二 ·处理外部邮件的Exchangeserver设置
·准备好升级你的Exchange2003 ·Exchange2000安装的系统需求
·安装秘诀:Exchange2000容量与拓朴计算器 ·安装秘诀:将现有的Exchange2000群集节点

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。