Silverlight調(diào)用WCF出現(xiàn)異常解決方案
WCF在實(shí)際開(kāi)發(fā)過(guò)程中,其應(yīng)用范圍廣泛,可以幫助我們輕松的實(shí)現(xiàn)許多領(lǐng)域的功能需求。不過(guò)在操作的過(guò)程中,我們同樣需要注意一些細(xì)節(jié)問(wèn)題以防止異常的出現(xiàn)。在這里我們就為大家介紹一種Silverlight調(diào)用WCF時(shí)出現(xiàn)錯(cuò)誤的解決方法。
在采用Silverlight調(diào)用WCF的開(kāi)發(fā)過(guò)程中,今天遇到一個(gè)錯(cuò)誤。由于 Silverlight 中只支持異步方式的 WCF 調(diào)用,所以代碼一般是這樣子的:
- var myServiceClient = new MyServiceClient();
- myServiceClient.GetSomeDataCompleted += (sender, args) =>
- {
- HtmlPage.Window.Alert("completed.");
- };
- myServiceClient.GetSomeDataAsync();
這樣寫(xiě)是沒(méi)有問(wèn)題的。#t#
但是有的朋友可能為了提高代碼共用程度,而把 myServiceClient 這個(gè) WCF 的客戶端代理對(duì)象作為類的字段來(lái)定義,以便在多次調(diào)用中共享。比如這篇教程中所說(shuō)的:
“這一步比較復(fù)雜,這里分小點(diǎn)討論。為了調(diào)用WCF服務(wù),先定義一下全局變量。AcademeServiceClient academeSClient;”
這樣做有什么問(wèn)題呢?
假設(shè)我們上面的代碼是在一個(gè)按鈕的點(diǎn)擊事件處理函數(shù)里定義的,那么,就會(huì)導(dǎo)致每點(diǎn)擊一次按鈕就注冊(cè)一次 GetSomeDataCompleted 的事件處理函數(shù)。***你會(huì)發(fā)現(xiàn)點(diǎn)一次按鈕,會(huì)重復(fù)多次執(zhí)行回調(diào)函數(shù)。
所以在Silverlight調(diào)用WCF中還是不要共用 client 代理了,每次調(diào)用之前創(chuàng)建一個(gè)比較好。因?yàn)榻裉煊龅搅诉@個(gè)錯(cuò)誤,在這里提醒一下大家。