Azure移动服务错误---请求无法完成。 ()

时间:2014-11-30 09:45:36

标签: azure xamarin mvvmcross azure-mobile-services

我使用带有.net后端的Azure移动服务,MvvmCross使用基于Xamarin Pcl的解决方案。 当我从Azure移动服务提供的默认浏览器界面以交互方式运行时,该服务会返回结果。我也使用离线数据同步功能。我可以将数据推送到服务器并且它可以正常工作,但现在当我尝试从服务器提取数据时。

  

{Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException:请求可以   没有完成。 () 在   Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.d__18.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
  在   Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.d__1d.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() at Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.<RequestAsync>d__4.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult()   在   Microsoft.WindowsAzure.MobileServices.MobileServiceTable.d__f.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() at Microsoft.WindowsAzure.MobileServices.MobileServiceTable.<ReadAsync>d__7.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult()   在   Microsoft.WindowsAzure.MobileServices.Sync.PullAction.d__0.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
  在   Microsoft.WindowsAzure.MobileServices.Sync.TableAction.d__0.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
  在   Microsoft.WindowsAzure.MobileServices.Sync.MobileServiceSyncContext。   d__3b.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
  在   Microsoft.WindowsAzure.MobileServices.Sync.MobileServiceSyncContext.d__27.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
  在   AgLiveMobile.Core.Services.EmployeeService.d__4.MoveNext()}

我甚至调试了从客户端到服务器的服务,结果是来了,但是我无法知道为什么会这样。我正在使用Wifi连接在我的Windows Phone 8.1设备上进行测试。

请帮忙。

2 个答案:

答案 0 :(得分:10)

在VS的异常对话框中进一步分析http响应后。实际错误是404未找到。然后进一步调试问题,结果是Azure移动服务的应用程序URL应该是https而不是http

如果产品团队能够找到并提供正确的错误信息,这将会很好,这可以节省大量时间,开发人员也不会感到沮丧。

答案 1 :(得分:0)

我遇到了同样的问题,但我的问题是,UpdateAsync尝试获取我的数据库中不存在的项目。

我已使用SyncHandler和以下catch块解决了这个问题:

                catch (Exception ex) when (ex is MobileServiceInvalidOperationException)
                {
                    var error = (MobileServiceInvalidOperationException)ex;

                    if (operation.Kind != MobileServiceTableOperationKind.Update)
                    {
                        continue;
                    }

                    if (error.Response.StatusCode != HttpStatusCode.NotFound)
                    {
                        continue;
                    }

                    var azureMobileBackend = new AzureMobileBackend();

                    var table = await azureMobileBackend.GetSyncTable<...>();
                    await table.PurgeAsync(null, table.Where(x => x == operation.Item.ToObject<...>()), new CancellationToken());
                }

通过我的代码,我检查了Mobile Apps是否尝试更新数据库中不存在的对象,以及是否在本地数据库中删除它。我不确定,这是否是最好的方式,但我的情况还可以。

我认为问题导致,如果应用程序正在关闭,而UpdateAsync方法正在运行。