因此,当我在本地部署我的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时更新不起作用。当它更新TestPointAttempt时,应用程序因内存不足错误而崩溃。它开始吞噬mbs在大约5秒内从~30mb上升到1gb!我使用了一些内存分析工具,它发生在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;
}
}
然后我用fiddler查看响应,fiddler也会因为响应太大而崩溃。所以现在我发现移动服务正在响应GIG数据...但是如何?我甚至不知道从哪里开始寻找。我调试了移动服务,更新似乎通过TableController很好,但它返回了大量的数据....
我从哪里开始查看移动服务,了解它如何/为什么返回这么多数据?
答案 0 :(得分:0)
问题在于JSON将尝试序列化虚拟集合。由于我的所有导航属性也被序列化,因此尝试发回大部分数据库。解决方案是在导航属性上添加一个json ignore属性,如下所示:
[JsonIgnore]
public virtual Scenario Scenario { get; set; }