国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

教程:使用WebService進行異步通信

2024-07-21 02:28:18
字體:
來源:轉載
供稿:網友

  通常在web應用程序中不會考慮到這個需求。做智能客戶端的時候,當用到webservice時,由于服務器處理速度、網絡傳輸速度等各種原因會使一個webservice從請求開始到獲得響應結果之間等待一段時間,這時候線程會處于阻塞狀態,程序會等待請求結果導致客戶端無法進行其他的動作或處理。這時候就需要異步的使用webservice。

  最容易被想到的方法當然是建立一個新的線程來執行webservice的請求并獲得結果,這樣就可以不影響程序的主線程的工作,并且也非常容易實現,但是在一個復雜的應用程序中,用戶也許會同時請求多個webservice,這時候就得創建并控制多個線程。多線程的控制雖然可以實現很好的應用程序,但難度是比較大的,而且很容易引起異常。

  在.net的sdk中實際上就有關于異步調用webservice的介紹和示例。其主要的工作原理和流程如下:

方法一、
private void button_click_(object sender, system.eventargs e)
{        
     //為一個webservice的代理類創建一個實例
     asy.asynchronism somews = new asy.asynchronism();

     //創建一個異步回調對象,構造函數的參數為回調的方法,該回調的方法必須包含一個異步操作狀態類型的參數
     system.asynccallback cb= new asynccallback(showmsg);

     //開始進行異步通信,通常定義一個iasyncresult異步操作狀態類型的變量來接收開始異步通信方法所返回的通信狀態
     //通過這個操作狀態的實例就可以掌握當前通信狀態。
     //如:system.iasyncresult ar = somews.beginhelloworld(cb,somews);
     somews.beginhelloworld(cb,somews);

     }

void showmsg(iasyncresult ar)   //必須要有一個iasyncresult類型的參數
{

     //定義一個代理類的類型的變量接收所在回調方法的參數的異步操作信息
     asy.asynchronism somews=(asy.asynchronism)ar.asyncstate;

     //該代理類實例調用end</webmethod/>方法來獲得webservice的結果
     messagebox.show(somews.endhelloworld(ar));
              
}
方法二、
private void button_click_(object sender, system.eventargs e)
{
     //為一個webservice的代理類創建一個實例
     asy.asynchronism somews = new asy.asynchronism();

     system.iasyncresult ar = somews.beginhelloworld(null,null);
              
     ar.asyncwaithandle.waitone();

     messagebox.show(somews.endhelloworld(ar));

}

  方法一實現了請求和接收異步通信,運用起來比較靈活,工作的方法看起來也很像多線程的操作方式。

  方法二雖然也實現了發送請求和接收結果異步通信,但是用在實際的程序中并沒有達到所需要的效果。

  詳細的介紹請參看sdk中的描述

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和顺县| 茶陵县| 新巴尔虎左旗| 宁都县| 武城县| 桂阳县| 金乡县| 荣成市| 舞阳县| 商洛市| 阜城县| 赫章县| 丹寨县| 曲麻莱县| 武鸣县| 贵德县| 安泽县| 成武县| 从化市| 缙云县| 容城县| 广宗县| 云安县| 清镇市| 肇源县| 府谷县| 昌江| 新宾| 巴林左旗| 宜章县| 米林县| 和政县| 磐安县| 土默特右旗| 唐河县| 张家港市| 汶川县| 裕民县| 温宿县| 新巴尔虎左旗| 茌平县|