【问题标题】:Azure Mobile Services error --- The request could not be completed. ()Azure 移动服务错误 --- 请求无法完成。 ()
【发布时间】:2015-01-28 11:41:21
【问题描述】:

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

{Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException:请求可能 不能完成。 () 在 Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.d__18.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.d__1d.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 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.TaskAwaiter1.GetResult() 在 Microsoft.WindowsAzure.MobileServices.MobileServiceTable.d__f.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 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.TaskAwaiter1.GetResult() 在 Microsoft.WindowsAzure.MobileServices.Sync.PullAction.d__0.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.WindowsAzure.MobileServices.Sync.TableAction.d__0.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.WindowsAzure.MobileServices.Sync.MobileServiceSyncContext。 d__3b.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.WindowsAzure.MobileServices.Sync.MobileServiceSyncContext.d__27.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 AgLiveMobile.Core.Services.EmployeeService.d__4.MoveNext()}

我什至确实调试了从客户端到服务器的服务,结果出来了,但我不知道为什么会发生这种情况。我正在我的 Windows Phone 8.1 设备上进行测试,并开启了 Wifi 连接。

请帮忙。

【问题讨论】:

    标签: azure xamarin mvvmcross azure-mobile-services


    【解决方案1】:

    进一步分析VS异常对话框中的http响应。实际错误是 404 Not found。然后进一步调试问题原来是Azure移动服务的应用程序url应该是https而不是http

    如果产品团队能够发现这一点并给出适当的错误消息,那就太好了,这样可以节省大量时间,并且开发人员不会感到沮丧。

    【讨论】:

    • 感谢您的反馈——这确实很令人困惑!我正在将请求发送给开发团队。我们可能需要添加一个内部异常。
    【解决方案2】:

    我遇到了同样的问题,但我的问题是,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());
                    }
    

    使用我的代码,我检查移动应用程序是否尝试更新数据库中不存在的对象,如果,则在本地数据库中删除它。我不确定这是否是最好的方法,但对我来说没问题。

    我认为问题的原因是,如果应用程序正在关闭,而 UpdateAsync 方法正在工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2020-10-25
      相关资源
      最近更新 更多