摘要:學(xué)習(xí)如何使用 microsoft .net framework 精簡版通過智能設(shè)備應(yīng)用程序同步和異步調(diào)用 xml web service。
microsoft®.net framework 精簡版的一個主要功能是能夠使用 xml web service。microsoft .net framework 精簡版支持以兩種不同的方式使用 xml web service:同步和異步。這兩種方式各有優(yōu)缺點。同步 xml web service 調(diào)用編碼簡單,而異步調(diào)用的編碼略微復(fù)雜。如果 xml web service 長時間無響應(yīng),同步調(diào)用將凍結(jié)應(yīng)用程序,而異步調(diào)用則允許用戶在調(diào)用 xml web service 期間與應(yīng)用程序進行交互。
通過 smart device(智能設(shè)備)項目使用 xml web service 時,將發(fā)生幾秒鐘的初始延遲。如果生成異步調(diào)用,則此延遲不會凍結(jié)應(yīng)用程序的用戶界面。當(dāng) .net framework 精簡版運行時設(shè)置 xml web service 的連接細節(jié)并緩存連接細節(jié)時將發(fā)生此延遲。通常情況下,這會導(dǎo)致應(yīng)用程序無響應(yīng)。以后再調(diào)用 xml web service 時,性能將會顯著提高。
本文說明了如何向 smart device(智能設(shè)備)項目添加對 xml web service 的 web 引用,以及如何同步和異步調(diào)用 xml web service。
本文假設(shè)您在使用 microsoft visual studio® .net 2003 創(chuàng)建智能設(shè)備應(yīng)用程序方面有一定的經(jīng)驗。
要在 smart device(智能設(shè)備)項目中使用 xml web service,您需要在項目中添加 web 引用。項目通過 web 引用來使用 xml web service。在項目中添加 web 引用時,visual studio .net 將自動生成一個“代理類”(其中包含用作 xml web service 每個公開方法的代理的方法)。默認情況下,代理類不會顯示在 solution explorer(解決方案資源管理器)中。應(yīng)用程序使用自動生成的類(而不是使用自己的代碼修改的類)來訪問 xml web service。
要向項目中添加 web 引用,請執(zhí)行以下操作:
add web reference(添加 web 引用)對話框
visual studio .net 在添加 web 引用時生成的代理類還包含用于同步或異步訪問 web 服務(wù)的方法。現(xiàn)在我們來看一下如何實現(xiàn)此目的。
生成對 xml web service 的同步調(diào)用時,調(diào)用線程將中斷,直到 xml web service 返回方法調(diào)用的結(jié)果。如果在服務(wù)器中調(diào)用的方法不需要太多的處理時間,且將迅速返回,則同步調(diào)用比較有用。此外,同步 xml web service 調(diào)用比異步調(diào)用容易實現(xiàn)。但是,通過 .net framework 精簡版應(yīng)用程序調(diào)用 xml web service 時將發(fā)生重大延遲,這將使應(yīng)用程序鎖定并使用戶接口凍結(jié),直到返回方法調(diào)用為止。
要生成同步 xml web service 調(diào)用,需要創(chuàng)建一個代理類實例,然后調(diào)用此代理類中的方法,方式與調(diào)用其他類中的方法相同。以下代碼示例演示了如何生成對 xml web service 的 web 方法(用于返回有關(guān) sql server 附帶的 pubs 示例數(shù)據(jù)庫中的書籍的信息)的調(diào)用。然后,代碼將通過 dataset 將數(shù)據(jù)加載到 windows 窗體上的 listview 控件。
此示例假設(shè)您在添加 web 引用(如本文第一部分所述)時將 web 引用命名為 bookcatalog。bookcatalog xml web service 包含 getitems web 方法,該方法將返回一個 dataset 對象。此代碼取自本文附帶的下載中的 button1_click() 事件處理程序。
// ---- 調(diào)用 xml web service ----// 創(chuàng)建 web 服務(wù)代理類的實例bookcatalog.service1 bookcatalog = new bookcatalog.service1();// 創(chuàng)建 dataset 對象的新實例并調(diào)用 web 服務(wù)// 方法 getitems 檢索書籍列表dataset ds = bookcatalog.getitems();// ------------------------------// ----  處理 dataset ----// 遍歷 dataset 并將每個行的 title_id 和 title 字段// 添加至 listviewforeach(datarow drbook in ds.tables[0].rows) {    // 創(chuàng)建一個新 listviewitem 添加到 listview    listviewitem book = new listviewitem();    // 將 title_id 字段指定給 text 屬性    book.text = drbook["title_id"].tostring();    // 將 title 字段指定給第一個 subitem    book.subitem[0].text = drbook["title"].tostring();    // 將書 listviewitem 添加到 listview    listview1.items.add(book);}// ------------------------------通過生成異步 xml web service 調(diào)用,您可以在等待 xml web service 作出響應(yīng)時繼續(xù)使用調(diào)用線程。也就是說,用戶可以在應(yīng)用程序未鎖定的情況下繼續(xù)與其交互,而 xml web service 訪問也將繼續(xù)進行。這是一種更好的設(shè)計模式,通過使用多線程支持,可以更有效地在智能設(shè)備應(yīng)用程序中使用線程。生成異步調(diào)用時,將在不同于運行用戶界面的線程中生成調(diào)用。xml web service 應(yīng)用程序不需要任何特殊配置即可支持異步訪問,也不需要知道調(diào)用方式是同步還是異步。代理類中的每個同步方法都有相應(yīng)的 begin 和 end 方法。例如,如果 xml web service 方法名為 getitems,則異步方法為 begingetitems 和 endgetitems。
新聞熱點
疑難解答
圖片精選