WCF RIA服务返回的数据在服务的两端不匹配
本文关键字:服务 不匹配 数据 返回 WCF RIA | 更新日期: 2023-09-27 18:17:57
我最初认为这是一个INotifyPropertyChanged/Binding问题,因为我不确定如何调试silverlight部分。因此,我必须在foreach循环中放置一个消息框,并在以这种方式返回数据后查看值。事实证明,我在从服务中获取更新的数据时遇到了麻烦。我使用该服务对服务器上的数据进行一些更新,当它返回时调用重新加载数据。服务的这一部分正在返回正确的数据(我使用了一个断点进行验证,这样我就可以查看保存的数据结果)。但是silverlight方面没有得到正确的数据。以下是相关代码。
public IQueryable<OurClass> GetItems(string condition)
{
var result = from items in context.OurClass
where item.value == condition
select item;
return result; //had my breakpoint here and the values were the correct updated values
}
/
Context.Load<OurClass>(Context.GetItemsQuery(condition)).Completed += new EventHandler(Context_LoadCompleted);
/
private void Context_LoadCompleted(object sender, EventArgs e)
{
IEnumerable<OurClass> result = ((LoadOperation<OurClass>)sender).Entities;
//This is where I put a MessageBox to view the returned results and the data was different
//than what was contained in the other result
}
你知道是什么原因导致的吗?接下来我该看什么?
编辑:一些示例数据是OurClass。OurProperty在服务器端将等于"Test",但是一旦它在客户端收到,它将等于"Development",这是旧的值。IEnumerable将保存新添加的记录,而不包含已删除的记录。任何先前存在的属性都将包含旧的属性值,而不是新值。
解决方案是我需要添加参数LoadBehavior。RefreshCurrent到查询调用。所以这:
Context.Load<OurClass>(Context.GetItemsQuery(condition)).Completed += new EventHandler(Context_LoadCompleted);
必须是这样:
Context.Load<OurClass>(Context.GetItemsQuery(condition), LoadBehavior.RefreshCurrent, true).Completed += new EventHandler(Context_LoadCompleted);
服务两端的数据有何不同?你能给我们看一些例子数据吗?你可以使用像wireshark这样的工具来查看数据(需要在服务器上,或者在你运行silverlight applet的客户端上)
您是否尝试正确调试您的silverlight,即附加到如下所示的过程:http://www.michaelsnow.com/2010/04/22/silverlight-tip-of-the-day-2-attach-to-process-debugging/
我还建议打开WCF跟踪,如下所示:http://msdn.microsoft.com/en-us/library/ms733025.aspx