2011-08-31 21 views
0

我正在製作WP7應用程序,它正在使用我無法觸及的ASMX,也不適應,因爲我不是創建者,也不是提供者,我只是在使用它。WP7無法正確使用ASMX?總是得到空陣列?

當我將服務引用添加到我的WP7解決方案(不是芒果 - 但它與芒果中的行爲相同)時,我將取消選中「引用程序集中的重用類型」,因爲我不關心這些。注意:即使當我離開復選框時,它也不起作用。

然後我下面的代碼添加到新的WP7頁面的構造函數:

MobileWS.WebServiceSoapClient ws = new MobileWS.WebServiceSoapClient("WebServiceSoap", "http://www.somewhere.com/MobileService.asmx"); 
ws.getCountriesCompleted += new EventHandler<MobileWS.getCountriesCompletedEventArgs>(OnGetCountriesCompleted); 
ws.getCountriesAsync("fr"); 

這熄滅,並獲取國家對象的數組(「FR」代表「法國」,所以它會成爲「Etas Unis」而不是「美國」)......至少這是主意。 我甚至用Fiddler2檢查它是否返回任何東西,事實上,ASMX用包含這些國家的一些XML進行響應。

然後我的處理程序是這樣的:

private void OnGetCountriesCompleted(object sender, MobileWS.getCountriesCompletedEventArgs e) 
{ 
    if (e.Cancelled == false && e.Error == null && e.Result != null) 
    { 
     List<MobileWS.Country> countries = e.Result.ToList<MobileWS.Country>(); 
     CountriesListBox.ItemsSource = countries; 
    } 
} 

不幸的e.Result總是返回國的對象(所以非空數組可言,但他知道應該在那裏的國家目標,但有在數組中是0項)!

不過,如果我瀏覽到:http://www.somewhere.com/MobileService.asmx我得到的名單時,我調用的getCountries功能。 更奇怪的是,當我複製並通過WPF應用程序中完全相同的代碼時,它的作用就像一個魅力,我得到一個有7個國家對象的填充數組。

我拒絕解析返回的XML自己,到目前爲止,但我感覺我需要早晚因爲這個失敗。


我敢肯定,這是回送XML是正確的,否則WPF應用程序將有類似的問題,不是嗎?

所以,看起來像我註定要分析它自己呢? 我在網上看到了很多他們這樣做的例子(解析XML自己的結果),所以必須有一個原因,那就是我上面描述的原因:)。

回答

0

聽起來像是序列化問題。這就是我所能說的,不知道服務或者如何寫入/生成使用的類。

請記住,Windows Phone的有限的反射能力,因此只能反映在公共/內部類,並且不支持動態。

0

如果你試圖反序列化自己,結果會怎麼樣?當然,這僅僅是手動解析xml的一步,但它是一些東西。如果沒有,也許你可以找出發生了什麼問題。

+0

你是什麼意思與「反序列化的結果自己」 ......我或多或少這樣做,現在我認爲,我的「解析」,「補」,從web服務的對象WebGet的(不知道它是如何再次呼籲,但它基本上是一個httpget)。 – Michael

+0

我的意思是通過使用XmlSerializer ... –