Web services 异步方法未在WIndows Phone 8.1的后台模式下调用

Web services 异步方法未在WIndows Phone 8.1的后台模式下调用,web-services,silverlight,background,windows-phone-8.1,async-await,Web Services,Silverlight,Background,Windows Phone 8.1,Async Await,我为windows phone8.1 silver light web服务应用程序创建了后台调度程序。当它调用async方法时,它不会锁定服务器。没有后台代理,web服务可以正常工作,但在后台调度程序中它无法工作。有人可以指导我吗。以下是我的代码 1) WebservicePortTypeClient client = null; 2) client = new WebservicePortTypeClient(); 3) client.MMAsync(objlog.Strin

我为windows phone8.1 silver light web服务应用程序创建了后台调度程序。当它调用async方法时,它不会锁定服务器。没有后台代理,web服务可以正常工作,但在后台调度程序中它无法工作。有人可以指导我吗。以下是我的代码

  1)  WebservicePortTypeClient client = null;
  2)  client = new WebservicePortTypeClient();
  3)  client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
  4)  client.MMCompleted +=   new EventHandler<MMCompletedEventArgs>(returnmlp);
在步骤3,它在日志中抛出以下语句

程序“[3436]BACKGROUNDTASKHOST.EXE”已退出,代码为1 0x1。 程序“[2828]AgHost.exe”已退出,代码为0 0x0


如果您有任何建议,我们将不胜感激。

您应该使用延迟来表示您的后台任务何时完成。否则,操作系统可能会提前终止后台线程。您可以这样做:

public async void Run(IBackgroundTaskInstance taskInstance)
{
    BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

    WebservicePortTypeClient client = null;
    client = new WebservicePortTypeClient();
    var result = await client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");

    //Do something with result.

    //Add this after your task is complete.
    deferral.Complete();
}
更多信息可在此处找到:参考第4点

对于Windows Phone 8样式的代理:

将方法签名设置为受保护的异步重写。。。并为异步方法使用wait关键字

protected async override void  OnInvoke(ScheduledTask task)
{
    WebservicePortTypeClient client = null;
    client = new WebservicePortTypeClient();
    var result = await client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");

    //Do something with result

    NotifyComplete();
}

我使用以下代码实现了异步web服务调用

 int intResult = await TaskOfTResult_MethodAsync();
 async Task<int> TaskOfTResult_MethodAsync()
{
 1)  WebservicePortTypeClient client = null;
  2)  client = new WebservicePortTypeClient();
  3)  client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
**await Task.Delay(TimeSpan.FromSeconds(20));**
  4)  client.MMCompleted +=   new EventHandler<MMCompletedEventArgs>(returnmlp);
}

谢谢你rajshri。我已经实现了schedular代理,我无法将上述过程与我的解决方案联系起来。如何调用run方法。@rajaramesh run方法是WindowsPhone 8.1中所有后台任务的隐式方法。但我猜你没有用它。您是否正在使用旧的Windows Phone 8样式的代理?如果是,我建议您执行更新的后台任务模块。否,我正在使用windows phone 8.1。我遵循了以下实现代理的url。调度代理工作正常。但我无法链接async方法的背景任务。@rajaramesh我看到了您提供的链接。它是Windows Phone 8样式的后台代理,尽管您可以像以前一样在WP8.1 Silverlight中使用它。是否已在OnInvoke方法中添加NotifyComplete?