<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
    在確定是否適合在您的應用程序中采用異步 Web 方法時,有幾個問題需要考慮。首先,調用的 BeginXXX 函數必須返回一個 IAsyncResult 接口。IAsyncResult 是從多個異步 I/O 操作返回的,這些操作包括訪問數據流、進行 Microsoft&reg; Windows&reg; 套接字調用、執行文件 I/O、與其他硬件設備交互、調用異步方法,當然也包括調用其他 Web 服務。您可以從這些異步操作中得到 IAsyncResult,以便從 BeginXXX 函數返回它。您也可以創建自己的類以實現 IAsyncResult 接口,但隨后可能需要以某種方式包裝前面提到的某個 I/O 操作。

    對于前面提到的大多數異步操作,使用異步 Web 方法包裝后端異步調用很有意義,可以使 Web 服務代碼更有效。但使用委托進行異步方法調用時除外。委托會導致異步方法調用占用進程線程池中的某個線程。不幸的是,ASMX 處理程序為進入的請求提供服務時同樣要使用這些線程。所以與對硬件或網絡資源執行真正 I/O 操作的調用不同,使用委托的異步方法調用在執行時仍將占用其中一個進程線程。您也可以占用原來的線程,同步運行您的 Web 方法。

    下面的示例顯示了一個調用后端 Web 服務的異步 Web 方法。它已經使用 WebMethod 屬性標識了 BeginGetAge 和 EndGetAge 方法,以便異步運行。此異步 Web 方法的代碼調用名為 UserInfoQuery 的后端 Web 方法,以獲得它需要返回的信息。對 UserInfoQuery 的調用被異步執行,并被傳遞到 AsyncCallback 函數,后者被傳遞到 BeginGetAge 方法。這將導致當后端請求完成時,調用內部回調函數。然后,回調函數將調用 EndGetAge 方法以完成請求。此示例中的代碼比前面示例中的代碼簡單得多,并且還具有另外一個優點,即沒有在與為中間層 Web 方法請求提供服務的相同線程池中啟動后端處理。

    [WebService]

    public class GetMyInfo : System.Web.Services.WebService
    {

    [WebMethod]
    public IAsyncResult BeginGetAge(AsyncCallback cb, Object state)
    {

    // 調用異步 Web 服務調用。
    localhost.UserInfoQuery proxy
    = new localhost.UserInfoQuery();
    return proxy.BeginGetUserInfo("用戶名",
    cb,
    proxy);
    }

    [WebMethod]
    public int EndGetAge(IAsyncResult res)
    {
    localhost.UserInfoQuery proxy
    = (localhost.UserInfoQuery)res.AsyncState;
    int age = proxy.EndGetUserInfo(res).age;
    // 在此對 Web 服務的結果進行其他
    // 處理。
    return age;
    }
    }

    發生在 Web 方法中的最常見的 I/O 操作類型之一是對 SQL 數據庫的調用。不幸的是,目前 Microsoft&reg; ADO.NET 尚未定義一個完好的異步調用機制;而只是將 SQL 調用包裝到異步委托調用中對提高效率沒有什么幫助。雖然有時可以選擇緩存結果,但是也應當考慮使用 Microsoft SQL Server 2000 Web Services Toolkit(英文)將您的數據庫發布為 Web 服務。這樣您就可以利用 .NET Framework 中的支持,異步調用 Web 服務以查詢或更新數據庫。

    通過 Web 服務調用訪問 SQL 時,需要注意眾多的后端資源。如果您使用了 TCP 套接字與 Unix 計算機通信,或者通過專用的數據庫驅動程序訪問其他一些可用的 SQL 平臺,甚至具有使用 DCOM 訪問的資源,您都可以考慮使用眾多的 Web 服務工具包將這些資源發布為 Web 服務。

    使用這種方法的優點之一是您可以利用客戶端 Web 服務結構的優勢,例如使用 .NET Framework 的異步 Web 服務調用。這樣您將免費獲得異步調用能力,而您的客戶端訪問機制會與異步 Web 方法高效率地配合工作。

    使用異步 Web 方法聚合數據

    現在,許多 Web 服務都訪問后端的多個資源并為前端的 Web 服務聚合信息。盡管調用多個后端資源會增加異步 Web 方法模型的復雜性,但最終還是能夠顯著提高效率。

    假設您的 Web 方法調用兩個后端 Web 服務:服務 A 和服務 B。從您的 BeginXXX 函數,您可以異步調用服務 A 和服務 B。您應該向每個異步調用傳遞自己的回調函數。在從服務 A 和服務 B 接收到結果后,為觸發 Web 方法的完成,您提供的回調函數將驗證所有的請求都已完成,在返回的數據上進行所有的處理,然后調用傳遞到 BeginXXX 函數的回調函數。這將觸發對 EndXXX 函數的調用,此函數的返回將導致異步 Web 方法的完成。

    小結

    異步 Web 方法在 ASP.NET Web 服務中提供了一個有效的機制,可以調用后端服務,而不會導致占用卻不利用進程線程池中的寶貴線程。通過結合對后端資源的異步請求,服務器可以使用自己的 Web 方法使同時處理的請求數目達到最大。您應該考慮使用此方法開發高性能的 Web 服務應用程序。


    原文地址:http://ewebapp.cnblogs.com/articles/237372.html
    posted on 2006-05-07 15:22 hopeshared 閱讀(527) 評論(0)  編輯  收藏 所屬分類: Web Service
    主站蜘蛛池模板: 亚洲欧洲校园自拍都市| 亚洲第一精品电影网| 国产亚洲午夜精品| 日韩高清在线免费观看| 亚洲色偷偷色噜噜狠狠99网| 免费观看美女用震蛋喷水的视频| 久久久久亚洲av无码专区| 国产精品永久免费10000| 亚洲国产av美女网站| 国产卡二卡三卡四卡免费网址| 亚洲国产成人精品青青草原| 美女视频黄的全免费视频| **真实毛片免费观看 | 午夜免费啪视频在线观看| 亚洲综合无码一区二区| 天天影院成人免费观看| 亚洲综合一区二区三区四区五区| 永久免费毛片手机版在线看| 免费v片在线观看视频网站| 亚洲人成人77777网站不卡| 成年女人喷潮毛片免费播放| 亚洲sm另类一区二区三区| 亚洲AV无码乱码精品国产| 韩国免费A级毛片久久| 亚洲国产精品久久久久| 在线看片无码永久免费视频| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 亚洲成网777777国产精品| 国产无遮挡色视频免费观看性色| 亚洲中文字幕久久精品无码喷水 | 亚洲av无码偷拍在线观看| 亚洲午夜国产片在线观看| 十八禁无码免费网站| 亚洲综合精品成人| 久久亚洲色一区二区三区| 日韩免费人妻AV无码专区蜜桃 | 亚洲午夜国产精品无码老牛影视| 99热这里只有精品免费播放| 色天使色婷婷在线影院亚洲| 亚洲无人区一区二区三区| 99久久综合国产精品免费|