熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows服務器 >> 正文

服務器端異步 Web 方法(二)

2013-11-11 22:56:03  來源: Windows服務器 

  簡單的異步 Web 方法
  為舉例說明異步 Web 方法我從一個名為 LengthyProcedure 的簡單同步 Web 方法開始其代碼如下所示然後我們再看一看如何異步完成相同的任務LengthyProcedure 只占用給定的毫秒數
  
  [WebService]
  
  public class SyncWebService : SystemWebServicesWebService
  
  {
  
    [WebMethod]
  
    public string LengthyProcedure(int milliseconds)
  
    {
  
      SystemThreadingThreadSleep(milliseconds);
  
      return 成功;
  
    }
  
  }
  
  現在我們將 LengthyProcedure 轉換為異步 Web 方法我們必須創建如前所述的 BeginLengthyProcedure 函數和 EndLengthyProcedure 函數請記住我們的 BeginLengthyProcedure 調用需要返回一個 IAsyncResult 接口這裡我打算使用一個委托以及該委托上的 BeginInvoke 方法讓我們的 BeginLengthyProcedure 調用進行異步方法調用傳遞到 BeginLengthyProcedure 的回調函數將被傳遞到委托上的 BeginInvoke 方法從 BeginInvoke 返回的 IAsyncResult 將被 BeginLengthyProcedure 方法返回
  
  當委托完成時將調用 EndLengthyProcedure 方法我們將調用委托上的 EndInvoke 方法以傳入 IAsyncResult並將其作為 EndLengthyProcedure 調用的輸入返回的字符串將是從該 Web 方法返回的字符串下面是其代碼
  
  [WebService]
  
  public class AsyncWebService : SystemWebServicesWebService
  
  {
  
    public delegate string LengthyProcedureAsyncStub(
  
      int milliseconds);
  
    public string LengthyProcedure(int milliseconds)
  
    {
  
      SystemThreadingThreadSleep(milliseconds);
  
      return 成功;
  
    }
  
    public class MyState
  
    {
  
      public object previousState;
  
      public LengthyProcedureAsyncStub asyncStub;
  
    }
  
    [ SystemWebServicesWebMethod ]
  
    public IAsyncResult BeginLengthyProcedure(int milliseconds
  
      AsyncCallback cb object s)
  
    {
  
      LengthyProcedureAsyncStub stub
  
        = new LengthyProcedureAsyncStub(LengthyProcedure);
  
      MyState ms = new MyState();
  
      mspreviousState = s;
  
      msasyncStub = stub;
  
      return stubBeginInvoke(milliseconds cb ms);
  
    }
  
    [ SystemWebServicesWebMethod ]
  
    public string EndLengthyProcedure(IAsyncResult call)
  
    {
  
      MyState ms = (MyState)callAsyncState;
  
      return msasyncStubEndInvoke(call);
  
    }
  
  }
From:http://tw.wingwit.com/Article/os/fwq/201311/10270.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.