熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

使用WebService進行異步通信

2013-11-13 10:03:08  來源: .NET編程 

  

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

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

  的SDK中實際上就有關於異步調用webservice的介紹和示例其主要的工作原理和流程如下

  方法一


private void button_Click_(object sender SystemEventArgs e)
{       
     //為一個Webservice的代理類創建一個實例
     asyasynchronism someWS = new asyasynchronism();
 
     //創建一個異步回調對象構造函數的參數為回調的方法該回調的方法必須包含一個異步操作狀態類型的參數
     SystemAsyncCallback cb= new AsyncCallback(showmsg);
 
     //開始進行異步通信通常定義一個IAsyncResult異步操作狀態類型的變量來接收開始異步通信方法所返回的通信狀態
     //通過這個操作狀態的實例就可以掌握當前通信狀態
     //如SystemIAsyncResult ar = someWSBeginHelloWorld(cbsomeWS);
     someWSBeginHelloWorld(cbsomeWS);
 
     }
 
void showmsg(IAsyncResult ar)   //必須要有一個IAsyncResult類型的參數
{
 
     //定義一個代理類的類型的變量接收所在回調方法的參數的異步操作信息
     asyasynchronism someWS=(asyasynchronism)arAsyncState;
 
     //該代理類實例調用End</webmethod/>方法來獲得WebService的結果
     MessageBoxShow(someWSEndHelloWorld(ar));
             
}



方法二


private void button_Click_(object sender SystemEventArgs e)
{
     //為一個Webservice的代理類創建一個實例
     asyasynchronism someWS = new asyasynchronism();
 
     SystemIAsyncResult ar = someWSBeginHelloWorld(nullnull);
             
     arAsyncWaitHandleWaitOne();
 
     MessageBoxShow(someWSEndHelloWorld(ar));
 
}




方法一實現了請求和接收異步通信運用起來比較靈活工作的方法看起來也很像多線程的操作方式
方法二雖然也實現了發送請求和接收結果異步通信但是用在實際的程序中並沒有達到所需要的效果

詳細的介紹請參看SDK中的描述
From:http://tw.wingwit.com/Article/program/net/201311/12395.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.