我正在制作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");
这就是取出一个Country对象的数组(“fr”代表“french”,所以它将是“Etas Unis”而不是“United States”)......至少这是个主意。 我甚至用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应用程序会有类似的问题,不是吗?
所以,看起来我注定要自己解析它,然后呢? 我在Web上看到很多他们这样做的例子(解析XML结果),所以必须有一个原因,那个原因就是我上面描述的那个:)。
答案 0 :(得分:0)
听起来像是序列化问题。这就是我所能说的,不知道服务或如何编写/生成使用的类。
请记住,Windows Phone的反射能力有限,因此只能反映在公共/内部类中,并且不支持动态。
答案 1 :(得分:0)
如果您尝试自行反序列化结果会怎样?当然,它距离手动解析xml只有一步之遥,但这是一些东西。如果没有,也许你可以找出出了什么问题。