【问题标题】:Ria data corruption from server to client从服务器到客户端的 Ria 数据损坏
【发布时间】:2011-09-25 21:11:14
【问题描述】:

我在 Silverlight 4 Ria 项目的服务器端有一个 Linq 查询,它根据时间段(月)返回许多不同的项目。

我遇到的问题是当客户端回调触发数据已损坏并且从服务器返回的所有项目都是集合中最后一个项目的副本时。

服务器调用

Public Function GetBusinessHeadCountHistory(ByVal businessUnit As String) As IEnumerable(Of EngineeringHeadCountBusinessHistory)
        Return From t In ObjectContext.tblTimes
                     Join h In ObjectContext.tblEngineeringDashboard_CADMachinesCounts On t.ID Equals h.TimeID
                     Join b In ObjectContext.tblEngineeringDashboard_Business On h.BusinessID Equals b.ID
                           Where b.BusinessUnit = businessUnit
                           Order By t.Period
                           Select New EngineeringHeadCountBusinessHistory With {.Month = t.Period, .BusinessUnit = b.BusinessUnit, .HeadCount = h.Count}
End Function

客户端回调

Public Property EngineeringBusinessHistoryCount As ReadOnlyObservableCollection(Of EngineeringHeadCountBusinessHistory)
    Get
        Return _engineeringBusinessHistoryCount
    End Get
    Set(ByVal value As ReadOnlyObservableCollection(Of EngineeringHeadCountBusinessHistory))
        _engineeringBusinessHistoryCount = value
        IsBusinessCountBusy = False
        RaisePropertyChanged("ChildReportTitle")
        RaisePropertyChanged("EngineeringBusinessHistoryCount")
    End Set
End Property

我已确认服务器和 LinqPad 中的 Linq 查询是正确的。

有什么想法吗??

编辑:提琴手原始响应

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 1738
Content-Type: application/msbin1
Expires: -1
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Date: Thu, 30 Jun 2011 11:08:47 GMT

@#GetBusinessHeadCountHistoryResponsehttp://tempuri.org/@!GetBusinessHeadCountHistoryResult aDomainServices i)http://www.w3.org/2001/XMLSchema-instance^
TotalCount�^
RootResults b<http://schemas.datacontract.org/2004/07/EngineeringDashboard_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�_Month����~�X�_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�_Month��@���p�_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�_Month��@DE��_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�_Month���hE��_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�_Month���w`ض�_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�_Month��@E�4��_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�_Month����{���_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount� _Month���x�#��_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount� _Month��@F��_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount� _Month�����/�_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�"_Month���y�nG�_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�"_Month�����_�_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�"_Month�����]w�_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�$_Month���z���_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�$_Month���
����_#EngineeringHeadCountBusinessHistory_BusinessUnit�
skid-steer_ HeadCount�$_Month��@����

菲尔

【问题讨论】:

    标签: vb.net silverlight silverlight-4.0 ria rich-internet-application


    【解决方案1】:

    首先,使用 Fiddler 检查原始服务器响应是否正确。

    【讨论】:

    • 貌似和Fiddler有些区别
    【解决方案2】:

    问题归结为 POCO 类 Key 注释位于非唯一字段上。我已将其更改为唯一的 Month 属性,现在它可以按预期工作。

    奇怪的错误...

    Imports System.ComponentModel.DataAnnotations
    Imports System.Runtime.Serialization
    
    Public Class EngineeringHeadBUHistory
    
        '<Key()>
        '<DataMember()> _
        'Property BusinessUnit As String
        <Key()>
        <DataMember()>
        Property Month As Date
        <DataMember()> _
        Property HeadCount As Integer
    
    End Class
    

    【讨论】: