【问题标题】:Azure > App Service > Mobile App > Offline Sync doesn't work on my Android (Xamarin.Forms)Azure > 应用服务 > 移动应用 > 离线同步在我的 Android (Xamarin.Forms) 上不起作用
【发布时间】:2016-02-23 16:53:55
【问题描述】:

我目前正在努力让 Azure > 应用服务 > 移动应用 > 离线同步运行。 在我目前的实验中,我试图严格按照说明进行操作。

所以我做了如下:

迭代 1

  • 在 Azure 上定义了一个应用服务(使用新数据库等)
  • 下载快速入门 C# 后端 VS 解决方案
  • 下载快速入门 Xamarin.Forms 应用程序
  • 将 Xamarin.Forms PCL 和 Droid 项目集成到第一个解决方案中

=> 测试:TodoList 应用程序按预期工作。酷!

迭代 2

  • 在项目属性的“条件编译符号”中添加了 OFFLINE_SYNC_ENABLED
  • 在我的 Nexus 5 (Android 6.0 - API 23) 上再次运行该应用

=> 拉​​异步被调用...但没有任何反应。所以我存储在 Azure DB 中的 todoItems 不会出现。

我发现的唯一或多或少有趣的日志是这一行: 02-23 09:39:55.280 I/mono-stdout(25706):同步操作无效:请求无法完成。 (错误请求)

我无法通过 fiddler 识别任何流量。

对我来说,好像 azure 上的模板不起作用...

我做错了吗?你有什么建议吗?

非常感谢!

其他事实:

现在我在日志流中发现了一些有趣的东西:

https://offlinecheck1.azurewebsites.net/tables/TodoItem?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version% 2C__已删除

此请求不适用于 PostMan 埃瑟。

如果我通过在 __updatedAt 的前 2 次出现之前删除“__”来操纵这个 url,我会收到预期的记录。

构造url的组件有问题吗?

【问题讨论】:

  • 你引用的是什么版本的 SQLite 存储?
  • SQLitePCL 和 SQLitePCL.Ext 的 3.8.7.2。感谢您的宝贵时间。
  • 既然是一个错误的请求,服务器实际上是在收到一个请求。打开诊断并查看跟踪是个好主意。您可以通过Visual Studio DebuggingAzure Portal 进行此操作
  • 在 azure Stream Log 上,我发现这个请求以 400 结尾:GET offlinecheck1:80/tables/… 消息是:由于语法错误,服务器无法理解请求。我对域感到惊讶......或者它可能与 ZUMO-API-VERSION 标头有关?
  • 我应该更清楚一点,我想知道您使用的是哪个版本的 Mobile SDK SQLite 商店。你指的是这个吗? nuget.org/packages/Microsoft.Azure.Mobile.Client.SQLiteStore

标签: sqlite azure xamarin azure-mobile-services


【解决方案1】:

您使用的移动客户端 SDK 和服务器 SDK 的版本似乎不兼容。您应该使用Microsoft.Azure.Mobile.Client WindowsAzure.MobileServices。

有关详细信息,请参阅Client and server SDK versioning

仅供参考,移动服务和移动应用之间的变化是现在系统属性没有双下划线前缀。这在Upgrade from Mobile Services 文章中有记录。

这是用于移动应用的 Xamarin.Forms 离线同步示例的完整版本:Xamarin.Forms offline sync todo list

【讨论】:

  • 不再...正如您在上面的 cmets 中看到的那样,我改变了它。但这并没有改变行为。我从 Azure / Mobile App / Settings / Quick start / Xamarin.Forms / 3 New App > Download 中获取的模板。有趣的是,现在它带有“正确”的版本(也不起作用)。如果您按照我原始描述中的步骤操作,除非他们修复它,否则它将无法正常工作。我试了好几次。
  • 现在发出的请求是什么样的?如果您仍然看到下划线,则说明您仍在使用错误的客户端库。
  • 似乎 MSFT 正在修复快速启动模板。通过将我的包与新下载的快速入门项目的包进行比较,我发现了更多差异。现在我严格使用 Microsoft.Azure* 而不是 WindowsAzure.* 包。 GET 请求现在按预期工作。但是下一个问题发生在 POST 操作上。与第一个问题类似,有一个异常“在'TodoItem'类型的对象上找不到成员'__version'...”
  • 我从头开始使用新的解决方案(创建应用服务 > 快速启动 c# 服务器 > 快速启动 xamarin.forms 项目 > 安装包 azure-sqlite > 将 OFFLINE_SYNC_ENABLED 添加到编译符号。现在可以使用。但是 pushAsync 失败了。
  • 我们最近没有更改快速入门解决方案,所以我很惊讶您看到了不同。我最近为 Xamarin Forms 上的离线同步创建了一个示例,所以试试看:github.com/lindydonna/xamarin-forms-offline-sync
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 2023-01-07
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多