Web services 异步方法未在WIndows Phone 8.1的后台模式下调用
我为windows phone8.1 silver light web服务应用程序创建了后台调度程序。当它调用async方法时,它不会锁定服务器。没有后台代理,web服务可以正常工作,但在后台调度程序中它无法工作。有人可以指导我吗。以下是我的代码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
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?