2013-03-08 72 views
0

我正在开发一个使用.Net Web服务(由我开发)的windows phone应用程序。当我调用Web服务方法时,请异步执行,不要阻止UI。例如,下面是一个代码示例,用于向服务器询问列表o到达航班的列表。取消windows phone中的异步web服务调用

service.MobileWSSoapClient Proxy { get; set; } 
Proxy = new service.MobileWSSoapClient(); 
Proxy.GetArrivalsCompleted += proxy_GetArrivalsCompleted; 
Proxy.GetArrivalsAsync(searchFilter); 

这样,我给的自由,用户再次调用相同的方法或另一个(例如:刷新到来列表或搜索特定到达)。如果用户产生新的服务呼叫,应用程序应该“取消”第一个电话,并只显示最后一次电话的结果。我认为这在技术上是不可能的,取消已经到服务器的Web服务调用,我们应该等待服务器响应,然后忽略它。了解到这一点,将标记以某种方式标记为过时会很有帮助。作为该过时呼叫的响应,接收错误就足够了。我会写一个我想象/需要的伪代码。

void proxy_GetArrivalsCompleted(object sender, service.GetArrivalsCompletedEventArgs e){ 

    if (e.Error == null){ 
     // DO WORK 
    } 
    else 
    { 
     if(e.Error == Server Exception || e.Error == Connection Exception){ 
     MessageBox.Show("error"); 
     } 
     else if (e.Error == obsolete call){ 
     // DO NOTHING 
     } 
    } 

在此先感谢。

回答

0

您可以使用BackgroundWorker作为您的场景。因此,当用户再次调用Web服务时,您可以取消将终止服务调用的BackgroundWorker进程。

如何使用BackgroundWorker here

+0

当我从BackgroundWorker调用Web服务器时,它只是调用它并结束它的工作。意味着它不会等到服务器响应。 – nachoifa 2013-03-18 21:35:09