【问题标题】:Sync specific data from Azure to Xamarin (Offline sync)将特定数据从 Azure 同步到 Xamarin(离线同步)
【发布时间】:2018-04-03 14:23:25
【问题描述】:

我正在尝试“筛选”要从 Azure 同步的数据。但是,我似乎无法“在哪里”工作。有什么想法吗?

var allItems = await GetMyListItems();
var myIdsInList = allEdrops.Select(c => c.Id.ToLower()).ToList();

这个不行:

var query = this.myTable.CreateQuery().Where(c => myIdsInList.Contains(c.Id.ToLower())); //DONT WORK

这个有效(但得到所有值,我不想要)

var query = this.myTable.CreateQuery();  //WORKS

await this.myTable.PullAsync("allmyTableItems", query);

【问题讨论】:

  • 如果你取出 toLower() iirc 有什么告诉我这会导致问题,它会起作用吗
  • 没有。把它放在那里,因为我认为如果标题不同,我会得到任何结果。
  • 你说的await this.myTable.PullAsync("allmyTableItems", this.myTable.CreateQuery().Where(c => myIdsInList.Contains(c.Id.ToLower())));不行吗?

标签: azure xamarin synchronization azure-mobile-services


【解决方案1】:

MobileServiceClient 中使用SyncTable 并附加任何LINQ 查询。

readonly MobileServiceClient _mobileServiceClient = new MobileServiceClient("Azure Mobile App URL");

async Task<List<MyModel>> GetItems()
{
    return await _mobileServiceClient.GetSyncTable<MyModel>().Where(c => myIdsInList.Contains(c.Id.ToLower())).ToListAsync().ConfigureAwait(false);
}

下面是我使用客户端 SDK 与 Azure 移动应用交互的通用类:https://github.com/brminnick/UITestSampleApp/blob/master/Src/UITestSampleApp/Services/AzureService.cs

【讨论】:

  • GetItems 方法只会根据本地 SQLite 数据存储过滤数据。据我了解,op 想要将 Azure 端的特定数据同步到本地 SQLite db,所以我认为问题将集中在 PullAsync 操作和查询 await this.myTable.PullAsync("allmyTableItems", this.myTable.CreateQuery().Where(c =&gt; myIdsInList.Contains(c.Id.ToLower())));
【解决方案2】:

使用 fiddler 捕获网络跟踪,您会发现您的过滤器查询如下所示:

GET https://{your-app-name}.azurewebsites.net/tables/{table-name}?$filter=((((((((((id eq '1') or (id eq '2')) or (id eq '3')) or (id eq '4')) or (id eq '5')) or (id eq '6')) or (id eq '7')) or (id eq '8')) or (id eq '9')) or (id eq '10'))

对于少数 Id,我可以按预期检索记录。对于您的方案,您可以从 Web 服务器 (IIS) 中触摸 requestLimits 下的 maxQueryString。对于 C# 后端,您可能还需要针对 ASP.NET 运行时改进 httpRuntime Element 下的 maxQueryStringLength

此外,您可以点击ODataValidationSettings.MaxNodeCount,该ODataValidationSettings.MaxNodeCount 用于确定$filter 语法树内的节点的最大值。

要解决此问题,您可以为您的移动应用程序 Enable diagnostics logging,然后您可以登录 KUDU 以查看日志文件,或者只需登录 Azure 门户以检查您的“监控 > 日志流”刀片下的流日志记录移动应用。此外,对于 C# 后端,您可以按照类似的issue 设置MaxNodeCount。对于Node.js后端,我没有找到任何教程,您可以关注30 DAYS OF AZURE MOBILE APPS进行调查,或者您可能需要迭代Ids并发送多个请求以同步您的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2020-04-15
    • 2016-11-17
    • 2017-11-02
    • 1970-01-01
    相关资源
    最近更新 更多