在UpdateAsync方法上从Mobile Service接收Gigs数据

时间:2014-12-31 05:20:25

标签: c# json entity-framework azure azure-mobile-services

因此,当我在本地部署我的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很好,但它返回了大量的数据....

我从哪里开始查看移动服务,了解它如何/为什么返回这么多数据?

1 个答案:

答案 0 :(得分:0)

问题在于JSON将尝试序列化虚拟集合。由于我的所有导航属性也被序列化,因此尝试发回大部分数据库。解决方案是在导航属性上添加一个json ignore属性,如下所示:

[JsonIgnore]
public virtual Scenario Scenario { get; set; }