在更新异步方法上从移动服务接收数据的演出
本文关键字:数据 服务 异步方法 更新 移动 | 更新日期: 2023-09-27 18:35:40
因此,当我在本地部署 Azure 移动服务时,更新操作可以正常工作。但是在我将其发布到 Azure 后,我的应用程序在尝试更新数据时崩溃。例如,这是我的两类:
public class TestSet : EntityData
{
public TestSet()
{
this.TestPointAttempts = new List<TestPointAttempt>();
}
[StringLength(10)]
public string TestTeamType { get; set; }
public int FieldTeamNumber { get; set; }
public int? DispatchTeamNumber { get; set; }
[DefaultValue(0)]
public int TestSetCount { get; set; }
public string DiscrepancyTypeId { get; set; }
public virtual DiscrepancyType DiscrepancyType { get; set; }
public string DiscrepancyTestSetId { get; set; }
public decimal? BER { get; set; }
public decimal? SSI { get; set; }
public decimal? BERLat { get; set; }
public decimal? BERLong { get; set; }
public string TileId { get; set; }
public virtual Tile Tile { get; set; }
public string ScenarioId { get; set; }
public virtual Scenario Scenario { get; set; }
public virtual ICollection<TestPointAttempt> TestPointAttempts { get; set; }
}
public class TestPointAttempt : EntityData
{
[Required]
public int TestAttemptNumber { get; set; }
public bool? TalkIn { get; set; }
public bool? TalkOut { get; set; }
public decimal? DAQIn { get; set; }
public decimal? DAQOut { get; set; }
public decimal? LatIn { get; set; }
public decimal? LongIn { get; set; }
public decimal? LatOut { get; set; }
public decimal? LongOut { get; set; }
public string TestSetId { get; set; }
public virtual TestSet TestSet { get; set; }
}
我建立了 1:n 关系。一切看起来都不错,新的插入工作正常(本地和 azure),但当我发布到 azure 时,更新不起作用。当它更新TestPointTry时,应用程序由于内存不足错误而崩溃。它开始吞噬大约 5 秒内从 ~30mb 上升到 1gb 的 mb!!我使用了一些内存分析工具,它发生在 json.net 中的反序列化期间。这是我的更新代码:
public async Task SaveTestSet(TestSet ts)
{
IsPending = true;
ErrorMessage = null;
try
{
var tpas = ts.TestPointAttempts;
foreach (var tpa in tpas)
{
await testPointAttemptTable.UpdateAsync(tpa);
}
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
Console.WriteLine(ErrorMessage);
}
finally
{
IsPending = false;
}
}
然后我用小提琴手查看响应,小提琴手也会崩溃,因为响应太大。所以现在我发现移动服务正在响应数据的 GIG......但是怎么做呢?我什至不知道从哪里开始寻找。我调试了移动服务,更新似乎通过 TableController 很好,但它返回了很多数据......
我从哪里开始查看移动服务,以了解它如何/为什么返回如此多的数据?
问题是 JSON 何时尝试序列化虚拟集合。由于我的所有导航属性也被序列化,因此尝试发回数据库的很大一部分。解决方案是在导航属性上添加一个 json ignore 属性,如下所示:
[JsonIgnore]
public virtual Scenario Scenario { get; set; }