我使用带有.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.TaskAwaiter1.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.TaskAwaiter1.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设备上进行测试。
请帮忙。
答案 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方法正在运行。